]> git.ipfire.org Git - thirdparty/make.git/commitdiff
[SV 58232] Disable inheritance of jobserver FDs for recursive make
authorKevin Buettner <kevinb@redhat.com>
Thu, 23 Apr 2020 21:05:34 +0000 (17:05 -0400)
committerPaul Smith <psmith@gnu.org>
Sun, 3 May 2020 00:09:29 +0000 (20:09 -0400)
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

src/posixos.c

index 525f292c99c461b31ae6288d5413c2b4aa552a6d..eab175a447e6e7c506f87841e6faea1154c612f5 100644 (file)
@@ -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;
 }