setreuid.2: Add discussion of NPTL credential-changing mechanism

At the kernel level, credentials (UIDs and GIDs) are a per-thread
attribute. NPTL uses a signal-based mechanism to ensure that
when one thread changes its credentials, all other threads change
credentials to the same values. By this means, the NPTL
implementation conforms to the POSIX requirement that the threads
in a process share credentials.

Reported-by: Shawn Landden <shawn@churchofgit.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
This commit is contained in:
Michael Kerrisk 2015-03-22 09:50:05 +01:00
parent ab09119b65
commit 38883d9578
1 changed files with 18 additions and 0 deletions

View File

@ -1,4 +1,5 @@
.\" Copyright (c) 1983, 1991 The Regents of the University of California.
.\" and Copyright (C) 2009, 2010, 2014, 2015, Michael Kerrisk <mtk.manpages@gmail.com>
.\" All rights reserved.
.\"
.\" %%%LICENSE_START(BSD_4_CLAUSE_UCB)
@ -191,6 +192,23 @@ The glibc
and
.BR setregid ()
wrapper functions transparently deal with the variations across kernel versions.
.\"
.SS C library/kernel ABI differences
At the kernel level, user IDs and group IDs are a per-thread attribute.
However, POSIX requires that all threads in a process
share the same credentials.
The NPTL threading implementation handles the POSIX requirements by
providing wrapper functions for
the various system calls that change process UIDs and GIDs.
These wrapper functions (including those for
.BR setreuid ()
and
.BR setregid ())
employ a signal-based technique to ensure
that when one thread changes credentials,
all of the other threads in the process also change their credentials.
For details, see
.BR nptl (7).
.SH SEE ALSO
.BR getgid (2),
.BR getuid (2),