]> git.ipfire.org Git - thirdparty/make.git/commitdiff
[SV 61621] Don't use POSIX_SPAWN_RESETIDS with posix_spawn()
authorPaul Smith <psmith@gnu.org>
Sun, 5 Dec 2021 19:22:43 +0000 (14:22 -0500)
committerPaul Smith <psmith@gnu.org>
Sun, 19 Dec 2021 21:34:10 +0000 (16:34 -0500)
When make is invoked in a environment where the user namespace is
restricted, such as under unshare(1) (on GNU/Linux), it won't be able
to find its real UID so the effective UID can't be set to it and
posix_spawn() will fail with EINVAL.

It's not less safe to run recipe jobs using the same UID values that
make was invoked with, so don't worry about this flag.

* src/job.c (child_execute_job): Don't set POSIX_SPAWN_RESETIDS flag.

src/job.c

index 54fadf000805c75f5b24a5ba77f39fa9af464288..9d97fc449feb1628e6b51e656fcc279cc4c49629 100644 (file)
--- a/src/job.c
+++ b/src/job.c
@@ -2359,8 +2359,8 @@ child_execute_job (struct childbase *child, int good_stdin, char **argv)
     if ((r = posix_spawn_file_actions_adddup2 (&fa, fderr, FD_STDERR)) != 0)
       goto cleanup;
 
-  /* Be the user, permanently.  */
-  flags |= POSIX_SPAWN_RESETIDS;
+  /* We can't use the POSIX_SPAWN_RESETIDS flag: when make is invoked under
+     restrictive environments like unshare it will fail with EINVAL.  */
 
   /* Apply the spawn flags.  */
   if ((r = posix_spawnattr_setflags (&attr, flags)) != 0)