From c55f31d05dc5eaf4461e5c53d43872e706f20e0d Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Wed, 29 Jul 2020 17:56:00 -0400 Subject: [PATCH] Disable inheritance of jobserver FDs for recursive make. BZ #1827850 Backport upstream git d79fe162c009788888faaf0317253b6f0cac7092 https://bugzilla.redhat.com/show_bug.cgi?id=1827850 https://savannah.gnu.org/bugs/?58232 Remove on next make rebase --- make-4.3-cloexec.patch | 36 ++++++++++++++++++++++++++++++++++++ make.spec | 10 +++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 make-4.3-cloexec.patch diff --git a/make-4.3-cloexec.patch b/make-4.3-cloexec.patch new file mode 100644 index 0000000..c680367 --- /dev/null +++ b/make-4.3-cloexec.patch @@ -0,0 +1,36 @@ +From d79fe162c009788888faaf0317253b6f0cac7092 Mon Sep 17 00:00:00 2001 +From: Kevin Buettner +Date: Thu, 23 Apr 2020 17:05:34 -0400 +Subject: [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; + } + diff --git a/make.spec b/make.spec index 4f18cec..f1cad7a 100644 --- a/make.spec +++ b/make.spec @@ -3,7 +3,7 @@ Summary: A GNU tool which simplifies the build process for users Name: make Epoch: 1 Version: 4.3 -Release: 2%{?dist} +Release: 3%{?dist} License: GPLv3+ URL: http://www.gnu.org/software/make/ Source: ftp://ftp.gnu.org/gnu/make/make-%{version}.tar.gz @@ -18,6 +18,11 @@ Patch1: make-4.0-noclock_gettime.patch # BZs #142691, #17374 Patch2: make-4.3-j8k.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1827850 +# https://savannah.gnu.org/bugs/?58232 +# Remove on next make rebase +Patch3: make-4.3-cloexec.patch + # autoreconf BuildRequires: autoconf, automake, gettext-devel BuildRequires: procps @@ -75,6 +80,9 @@ echo ============END TESTING=========== %{_includedir}/gnumake.h %changelog +* Wed Jul 29 2020 DJ Delorie - 1:4.3-3 +- Disable inheritance of jobserver FDs for recursive make. BZ #1827850 + * Tue Jul 28 2020 Fedora Release Engineering - 1:4.3-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild