Commit eeb8d00c authored by Devon H. O'Dell's avatar Devon H. O'Dell Committed by Russ Cox

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
parent 9e25eccf
...@@ -238,6 +238,10 @@ func forkExec(argv0 string, argv []string, envv []string, traceme bool, dir stri ...@@ -238,6 +238,10 @@ func forkExec(argv0 string, argv []string, envv []string, traceme bool, dir stri
dirp = StringBytePtr(dir) dirp = StringBytePtr(dir)
} }
if OS == "freebsd" && len(argv[0]) > len(argv0) {
argvp[0] = argv0p
}
// Acquire the fork lock so that no other threads // Acquire the fork lock so that no other threads
// create new fds that are not yet close-on-exec // create new fds that are not yet close-on-exec
// before we fork. // before we fork.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment