From eeb8d00c867570a500029cd113e6e34119c54766 Mon Sep 17 00:00:00 2001 From: "Devon H. O'Dell" Date: Sun, 6 Mar 2011 14:57:05 -0500 Subject: [PATCH] syscall: work around FreeBSD execve kernel bug FreeBSD's execve implementation has an integer underflow in a bounds test which causes it to erroneously think the argument list is too long when argv[0] is longer than interpreter + path. R=rsc, bradfitz, rsc1 CC=golang-dev https://golang.org/cl/4259056 --- src/pkg/syscall/exec_unix.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pkg/syscall/exec_unix.go b/src/pkg/syscall/exec_unix.go index 04c066918f8..2e09539eeae 100644 --- a/src/pkg/syscall/exec_unix.go +++ b/src/pkg/syscall/exec_unix.go @@ -238,6 +238,10 @@ func forkExec(argv0 string, argv []string, envv []string, traceme bool, dir stri dirp = StringBytePtr(dir) } + if OS == "freebsd" && len(argv[0]) > len(argv0) { + argvp[0] = argv0p + } + // Acquire the fork lock so that no other threads // create new fds that are not yet close-on-exec // before we fork.