From: Kevin Buettner Date: Thu, 23 Apr 2020 21:05:34 +0000 (-0400) Subject: [SV 58232] Disable inheritance of jobserver FDs for recursive make X-Git-Tag: 4.3.90~223 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d79fe162c009788888faaf0317253b6f0cac7092;p=thirdparty%2Fmake.git [SV 58232] Disable inheritance of jobserver FDs for recursive make A parent make will invoke a sub-make with close-on-exec disabled for the jobserver pipe FDs. Force close-on-exec to be to be enabled in the sub-make so the pipe is not always passed to child jobs. I have a test case which, when invoked with a suitable -j switch, will hang if the recipe inherits the jobserver pipe. This test case was inspired by a real world case in which testing GDB on Fedora would hang due to some poorly written test GDB cases having been passed the jobserver file descriptors. * src/posixos.c (jobserver_parse_auth): Call fd_noinherit() for jobserver pipe descriptors. Copyright-paperwork-exempt: yes --- diff --git a/src/posixos.c b/src/posixos.c index 525f292c..eab175a4 100644 --- a/src/posixos.c +++ b/src/posixos.c @@ -145,6 +145,11 @@ jobserver_parse_auth (const char *auth) /* When using pselect() we want the read to be non-blocking. */ set_blocking (job_fds[0], 0); + /* By default we don't send the job pipe FDs to our children. + See jobserver_pre_child() and jobserver_post_child(). */ + fd_noinherit (job_fds[0]); + fd_noinherit (job_fds[1]); + return 1; }