This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.25-247-g249548e
- From: azanella at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 25 Apr 2017 12:09:29 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.25-247-g249548e
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via 249548e476495e4714ba1f4593ebc04ce5dc2094 (commit)
via daeb1fa2e1b33323e719015f5f546988bd4cc73b (commit)
from 9581e76dbb4a8dad8a4493ef6833685153edd1d9 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=249548e476495e4714ba1f4593ebc04ce5dc2094
commit 249548e476495e4714ba1f4593ebc04ce5dc2094
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date: Mon Apr 24 09:43:41 2017 -0300
posix: Remove ununsed posix_spawn internal assignment
The internal 'ret' variable in '__spawni_child' function is not
used after assignment in most cases.
Checked on x86_64-linux-gnu.
* sysdeps/unix/sysv/linux/spawni.c (__spawni_child): Remove ununsed
assignment.
diff --git a/ChangeLog b/ChangeLog
index 449c6a2..9f4f9aa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2017-04-24 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+
+ * sysdeps/unix/sysv/linux/spawni.c (__spawni_child): Remove ununsed
+ assignment.
+
2017-04-24 Daurnimator <quae@daurnimator.com>
Adhemerval Zanella <adhemerval.zanella@linaro.org>
diff --git a/sysdeps/unix/sysv/linux/spawni.c b/sysdeps/unix/sysv/linux/spawni.c
index a10c1aa..c56f894 100644
--- a/sysdeps/unix/sysv/linux/spawni.c
+++ b/sysdeps/unix/sysv/linux/spawni.c
@@ -124,7 +124,6 @@ __spawni_child (void *arguments)
struct posix_spawn_args *args = arguments;
const posix_spawnattr_t *restrict attr = args->attr;
const posix_spawn_file_actions_t *file_actions = args->fa;
- int ret;
/* The child must ensure that no signal handler are enabled because it shared
memory with parent, so the signal disposition must be either SIG_DFL or
@@ -167,12 +166,12 @@ __spawni_child (void *arguments)
if ((attr->__flags & (POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER))
== POSIX_SPAWN_SETSCHEDPARAM)
{
- if ((ret = __sched_setparam (0, &attr->__sp)) == -1)
+ if (__sched_setparam (0, &attr->__sp) == -1)
goto fail;
}
else if ((attr->__flags & POSIX_SPAWN_SETSCHEDULER) != 0)
{
- if ((ret = __sched_setscheduler (0, attr->__policy, &attr->__sp)) == -1)
+ if (__sched_setscheduler (0, attr->__policy, &attr->__sp) == -1)
goto fail;
}
#endif
@@ -183,13 +182,13 @@ __spawni_child (void *arguments)
/* Set the process group ID. */
if ((attr->__flags & POSIX_SPAWN_SETPGROUP) != 0
- && (ret = __setpgid (0, attr->__pgrp)) != 0)
+ && __setpgid (0, attr->__pgrp) != 0)
goto fail;
/* Set the effective user and group IDs. */
if ((attr->__flags & POSIX_SPAWN_RESETIDS) != 0
- && ((ret = local_seteuid (__getuid ())) != 0
- || (ret = local_setegid (__getgid ())) != 0))
+ && (local_seteuid (__getuid ()) != 0
+ || local_setegid (__getgid ()) != 0))
goto fail;
/* Execute the file actions. */
@@ -206,8 +205,7 @@ __spawni_child (void *arguments)
switch (action->tag)
{
case spawn_do_close:
- if ((ret =
- close_not_cancel (action->action.close_action.fd)) != 0)
+ if (close_not_cancel (action->action.close_action.fd) != 0)
{
if (!have_fdlimit)
{
@@ -232,10 +230,10 @@ __spawni_child (void *arguments)
paths (like /dev/watchdog). */
close_not_cancel (action->action.open_action.fd);
- ret = open_not_cancel (action->action.open_action.path,
- action->action.
- open_action.oflag | O_LARGEFILE,
- action->action.open_action.mode);
+ int ret = open_not_cancel (action->action.open_action.path,
+ action->action.
+ open_action.oflag | O_LARGEFILE,
+ action->action.open_action.mode);
if (ret == -1)
goto fail;
@@ -245,19 +243,19 @@ __spawni_child (void *arguments)
/* Make sure the desired file descriptor is used. */
if (ret != action->action.open_action.fd)
{
- if ((ret = __dup2 (new_fd, action->action.open_action.fd))
+ if (__dup2 (new_fd, action->action.open_action.fd)
!= action->action.open_action.fd)
goto fail;
- if ((ret = close_not_cancel (new_fd)) != 0)
+ if (close_not_cancel (new_fd) != 0)
goto fail;
}
}
break;
case spawn_do_dup2:
- if ((ret = __dup2 (action->action.dup2_action.fd,
- action->action.dup2_action.newfd))
+ if (__dup2 (action->action.dup2_action.fd,
+ action->action.dup2_action.newfd)
!= action->action.dup2_action.newfd)
goto fail;
break;
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=daeb1fa2e1b33323e719015f5f546988bd4cc73b
commit daeb1fa2e1b33323e719015f5f546988bd4cc73b
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date: Fri Apr 21 10:40:56 2017 -0300
[BZ 21340] add support for POSIX_SPAWN_SETSID
This patch adds support for the POSIX_SPAWN_SETSID flag.
It was recently accepted by the Austin Group:
http://austingroupbugs.net/view.php?id=1044
Checked on x86_64
Daurnimator <quae@daurnimator.com>
Adhemerval Zanella <adhemerval.zanella@linaro.org>
[BZ #21340]
* posix/Makefile (tests): Add tst-posix_spawn-setsid to list of tests.
* posix/spawn.h: define POSIX_SPAWN_SETSID flag.
* posix/spawnattr_setflags.c (ALL_FLAGS): Add POSIX_SPAWN_SETSID to
valid flags.
* posix/tst-posix_spawn-setsid.c: Add test for POSIX_SPAWN_SETSID.
* sysdeps/mach/hurd/spawni.c (__spawni): Implementation of
POSIX_SPAWN_SETSID.
* sysdeps/posix/spawni.c (__spawni): Likewise.
* sysdeps/unix/sysv/linux/spawni.c (__spawni_child): Likewise.
* NEWS: Add note about POSIX_SPAWN_SETSID support.
diff --git a/ChangeLog b/ChangeLog
index 2f72e4b..449c6a2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2017-04-24 Daurnimator <quae@daurnimator.com>
+ Adhemerval Zanella <adhemerval.zanella@linaro.org>
+
+ [BZ #21340]
+ * posix/Makefile (tests): Add tst-posix_spawn-setsid to list of tests.
+ * posix/spawn.h: define POSIX_SPAWN_SETSID flag.
+ * posix/spawnattr_setflags.c (ALL_FLAGS): Add POSIX_SPAWN_SETSID to
+ valid flags.
+ * posix/tst-posix_spawn-setsid.c: Add test for POSIX_SPAWN_SETSID.
+ * sysdeps/mach/hurd/spawni.c (__spawni): Implementation of
+ POSIX_SPAWN_SETSID.
+ * sysdeps/posix/spawni.c (__spawni): Likewise.
+ * sysdeps/unix/sysv/linux/spawni.c (__spawni_child): Likewise.
+ * NEWS: Add note about POSIX_SPAWN_SETSID support.
+
2017-04-24 Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
* sysdeps/generic/math_private.h: Move the declaration of many
diff --git a/NEWS b/NEWS
index 811178b..5558ca3 100644
--- a/NEWS
+++ b/NEWS
@@ -52,6 +52,11 @@ Version 2.26
* The legacy cfree function has been removed. Applications should use the
free function instead.
+* posix_spawnattr_setflags now supports POSIX_SPAWN_SETSID flag to create a
+ new session ID for the posix_spawn and posix_spawnp. It is scheduled to
+ be added on next major revision of POSIX, so current support is enabled
+ with _GNU_SOURCE.
+
Security related changes:
* The DNS stub resolver limits the advertised UDP buffer size to 1200 bytes,
diff --git a/posix/Makefile b/posix/Makefile
index a6586ea..0fc509c 100644
--- a/posix/Makefile
+++ b/posix/Makefile
@@ -91,7 +91,7 @@ tests := test-errno tstgetopt testfnm runtests runptests \
bug-getopt5 tst-getopt_long1 bug-regex34 bug-regex35 \
tst-pathconf tst-getaddrinfo4 tst-rxspencer-no-utf8 \
tst-fnmatch3 bug-regex36 tst-getaddrinfo5 \
- tst-posix_spawn-fd \
+ tst-posix_spawn-fd tst-posix_spawn-setsid \
tst-posix_fadvise tst-posix_fadvise64
xtests := bug-ga2
ifeq (yes,$(build-shared))
diff --git a/posix/spawn.h b/posix/spawn.h
index 36e3867..a1154a3 100644
--- a/posix/spawn.h
+++ b/posix/spawn.h
@@ -59,6 +59,7 @@ typedef struct
#define POSIX_SPAWN_SETSCHEDULER 0x20
#ifdef __USE_GNU
# define POSIX_SPAWN_USEVFORK 0x40
+# define POSIX_SPAWN_SETSID 0x80
#endif
diff --git a/posix/spawnattr_setflags.c b/posix/spawnattr_setflags.c
index 9b3d1e0..62d2f00 100644
--- a/posix/spawnattr_setflags.c
+++ b/posix/spawnattr_setflags.c
@@ -25,6 +25,7 @@
| POSIX_SPAWN_SETSIGMASK \
| POSIX_SPAWN_SETSCHEDPARAM \
| POSIX_SPAWN_SETSCHEDULER \
+ | POSIX_SPAWN_SETSID \
| POSIX_SPAWN_USEVFORK)
/* Store flags in the attribute structure. */
diff --git a/posix/tst-posix_spawn-setsid.c b/posix/tst-posix_spawn-setsid.c
new file mode 100644
index 0000000..256bd72
--- /dev/null
+++ b/posix/tst-posix_spawn-setsid.c
@@ -0,0 +1,95 @@
+/* Test posix_spawn setsid attribute.
+ Copyright (C) 2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <spawn.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <sys/resource.h>
+#include <unistd.h>
+
+#include <support/check.h>
+
+static void
+do_test_setsid (bool test_setsid)
+{
+ pid_t sid, child_sid;
+ int res;
+
+ /* Current session ID. */
+ sid = getsid(0);
+ if (sid == (pid_t) -1)
+ FAIL_EXIT1 ("getsid (0): %m");
+
+ posix_spawnattr_t attrp;
+ /* posix_spawnattr_init should not fail (it basically memset the
+ attribute). */
+ posix_spawnattr_init (&attrp);
+ if (test_setsid)
+ {
+ res = posix_spawnattr_setflags (&attrp, POSIX_SPAWN_SETSID);
+ if (res != 0)
+ {
+ errno = res;
+ FAIL_EXIT1 ("posix_spawnattr_setflags: %m");
+ }
+ }
+
+ /* Program to run. */
+ char *args[2] = { (char *) "true", NULL };
+ pid_t child;
+
+ res = posix_spawnp (&child, "true", NULL, &attrp, args, environ);
+ /* posix_spawnattr_destroy is noop. */
+ posix_spawnattr_destroy (&attrp);
+
+ if (res != 0)
+ {
+ errno = res;
+ FAIL_EXIT1 ("posix_spawnp: %m");
+ }
+
+ /* Child should have a different session ID than parent. */
+ child_sid = getsid (child);
+
+ if (child_sid == (pid_t) -1)
+ FAIL_EXIT1 ("getsid (%i): %m", child);
+
+ if (test_setsid)
+ {
+ if (child_sid == sid)
+ FAIL_EXIT1 ("child session ID matched parent one");
+ }
+ else
+ {
+ if (child_sid != sid)
+ FAIL_EXIT1 ("child session ID did not match parent one");
+ }
+}
+
+static int
+do_test (void)
+{
+ do_test_setsid (false);
+ do_test_setsid (true);
+
+ return 0;
+}
+
+#include <support/test-driver.c>
diff --git a/sysdeps/mach/hurd/spawni.c b/sysdeps/mach/hurd/spawni.c
index 284875a..7430383 100644
--- a/sysdeps/mach/hurd/spawni.c
+++ b/sysdeps/mach/hurd/spawni.c
@@ -281,6 +281,9 @@ __spawni (pid_t *pid, const char *file,
}
#endif
+ if (!err && (flags & POSIX_SPAWN_SETSID) != 0)
+ err = __proc_setsid (proc);
+
/* Set the process group ID. */
if (!err && (flags & POSIX_SPAWN_SETPGROUP) != 0)
err = __proc_setpgrp (proc, new_pid, attrp->__pgrp);
diff --git a/sysdeps/posix/spawni.c b/sysdeps/posix/spawni.c
index 5cc2ad1..9cad25c 100644
--- a/sysdeps/posix/spawni.c
+++ b/sysdeps/posix/spawni.c
@@ -101,7 +101,8 @@ __spawni (pid_t *pid, const char *file,
to POSIX. */
|| ((flags & (POSIX_SPAWN_SETSIGMASK | POSIX_SPAWN_SETSIGDEF
| POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER
- | POSIX_SPAWN_SETPGROUP | POSIX_SPAWN_RESETIDS)) == 0
+ | POSIX_SPAWN_SETPGROUP | POSIX_SPAWN_RESETIDS
+ | POSIX_SPAWN_SETSID)) == 0
&& file_actions == NULL))
new_pid = __vfork ();
else
@@ -159,6 +160,10 @@ __spawni (pid_t *pid, const char *file,
}
#endif
+ if ((flags & POSIX_SPAWN_SETSID) != 0
+ && __setsid () < 0)
+ _exit (SPAWN_ERROR);
+
/* Set the process group ID. */
if ((flags & POSIX_SPAWN_SETPGROUP) != 0
&& __setpgid (0, attrp->__pgrp) != 0)
diff --git a/sysdeps/unix/sysv/linux/spawni.c b/sysdeps/unix/sysv/linux/spawni.c
index d7f9e83..a10c1aa 100644
--- a/sysdeps/unix/sysv/linux/spawni.c
+++ b/sysdeps/unix/sysv/linux/spawni.c
@@ -177,6 +177,10 @@ __spawni_child (void *arguments)
}
#endif
+ if ((attr->__flags & POSIX_SPAWN_SETSID) != 0
+ && __setsid () < 0)
+ goto fail;
+
/* Set the process group ID. */
if ((attr->__flags & POSIX_SPAWN_SETPGROUP) != 0
&& (ret = __setpgid (0, attr->__pgrp)) != 0)
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 20 ++++++++
NEWS | 5 ++
posix/Makefile | 2 +-
posix/spawn.h | 1 +
posix/spawnattr_setflags.c | 1 +
posix/tst-posix_spawn-setsid.c | 95 ++++++++++++++++++++++++++++++++++++++
sysdeps/mach/hurd/spawni.c | 3 +
sysdeps/posix/spawni.c | 7 ++-
sysdeps/unix/sysv/linux/spawni.c | 34 +++++++------
9 files changed, 150 insertions(+), 18 deletions(-)
create mode 100644 posix/tst-posix_spawn-setsid.c
hooks/post-receive
--
GNU C Library master sources