From: Devon H. O'Dell Date: Sun, 6 Mar 2011 19:57:05 +0000 (-0500) Subject: syscall: work around FreeBSD execve kernel bug X-Git-Tag: weekly.2011-03-07~9 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=eeb8d00c867570a500029cd113e6e34119c54766;p=gostls13.git 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 --- diff --git a/src/pkg/syscall/exec_unix.go b/src/pkg/syscall/exec_unix.go index 04c066918f..2e09539eea 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.