overhaul posix_spawn to use CLONE_VM instead of vfork
authorRich Felker <dalias@aerifal.cx>
Sun, 3 Feb 2013 21:42:40 +0000 (16:42 -0500)
committerRich Felker <dalias@aerifal.cx>
Sun, 3 Feb 2013 21:42:40 +0000 (16:42 -0500)
commitfb6b159d9ec7cf1e037daa974eeeacf3c8b3b3f1
treeb2abcc807bf30691c9e65a59f463c77f0e46ff19
parent89d3df6e5420878e35a93a481105017a94a02852
overhaul posix_spawn to use CLONE_VM instead of vfork

the proposed change was described in detail in detail previously on
the mailing list. in short, vfork is unsafe because:

1. the compiler could make optimizations that cause the child to
clobber the parent's local vars.

2. strace is buggy and allows the vforking parent to run before the
child execs when run under strace.

the new design uses a close-on-exec pipe instead of vfork semantics to
synchronize the parent and child so that the parent does not return
before the child has finished using its arguments (and now, also its
stack). this also allows reporting exec failures to the caller instead
of giving the caller a child that mysteriously exits with status 127
on exec error.

basic testing has been performed on both the success and failure code
paths. further testing should be done.
src/process/fdop.h
src/process/posix_spawn.c
src/process/posix_spawn_file_actions_adddup2.c