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
This commit is contained in:
Devon H. O'Dell 2011-03-06 14:57:05 -05:00 committed by Russ Cox
parent 9e25eccf48
commit eeb8d00c86

View File

@ -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.