2015-03-21 21:19:06 +00:00
|
|
|
.\" Copyright (c) 2015 by Michael Kerrisk <mtk.manpages@gmail.com>
|
|
|
|
.\"
|
|
|
|
.\" %%%LICENSE_START(VERBATIM)
|
|
|
|
.\" Permission is granted to make and distribute verbatim copies of this
|
|
|
|
.\" manual provided the copyright notice and this permission notice are
|
|
|
|
.\" preserved on all copies.
|
|
|
|
.\"
|
|
|
|
.\" Permission is granted to copy and distribute modified versions of this
|
|
|
|
.\" manual under the conditions for verbatim copying, provided that the
|
|
|
|
.\" entire resulting derived work is distributed under the terms of a
|
|
|
|
.\" permission notice identical to this one.
|
|
|
|
.\"
|
|
|
|
.\" Since the Linux kernel and libraries are constantly changing, this
|
|
|
|
.\" manual page may be incorrect or out-of-date. The author(s) assume no
|
|
|
|
.\" responsibility for errors or omissions, or for damages resulting from
|
|
|
|
.\" the use of the information contained herein. The author(s) may not
|
|
|
|
.\" have taken the same level of care in the production of this manual,
|
|
|
|
.\" which is licensed free of charge, as they might when working
|
|
|
|
.\" professionally.
|
|
|
|
.\"
|
|
|
|
.\" Formatted or processed versions of this manual, if unaccompanied by
|
|
|
|
.\" the source, must acknowledge the copyright and authors of this work.
|
|
|
|
.\" %%%LICENSE_END
|
|
|
|
.\"
|
|
|
|
.\"
|
getent.1, fallocate.2, getrlimit.2, llseek.2, madvise.2, mount.2, poll.2, posix_fadvise.2, pread.2, stat.2, symlink.2, timer_create.2, timerfd_create.2, unshare.2, acos.3, acosh.3, asin.3, asinh.3, asprintf.3, atan.3, atan2.3, atanh.3, cabs.3, cacos.3, cacosh.3, carg.3, casin.3, casinh.3, catan.3, catanh.3, cbrt.3, ccos.3, ccosh.3, ceil.3, cexp.3, cimag.3, clog.3, conj.3, copysign.3, cos.3, cosh.3, cpow.3, cproj.3, creal.3, csin.3, csinh.3, csqrt.3, ctan.3, ctanh.3, ctime.3, erf.3, erfc.3, exec.3, exp.3, exp2.3, expm1.3, fabs.3, fdim.3, floor.3, fma.3, fmax.3, fmin.3, fmod.3, frexp.3, ftw.3, get_nprocs_conf.3, getcwd.3, gethostbyname.3, getnetent.3, getutent.3, glob.3, ilogb.3, insque.3, j0.3, ldexp.3, lgamma.3, log.3, log10.3, log1p.3, log2.3, logb.3, login.3, lrint.3, lround.3, lseek64.3, malloc.3, mbsnrtowcs.3, mbsrtowcs.3, modf.3, mq_notify.3, mq_open.3, nan.3, nextafter.3, openpty.3, perror.3, posix_memalign.3, pow.3, printf.3, qsort.3, realpath.3, remainder.3, remquo.3, rint.3, round.3, scalbln.3, scandir.3, scanf.3, setnetgrent.3, significand.3, sin.3, sinh.3, sqrt.3, strcasecmp.3, tan.3, tanh.3, tgamma.3, trunc.3, unlocked_stdio.3, updwtmp.3, wcrtomb.3, wcsnrtombs.3, wcsrtombs.3, wordexp.3, wprintf.3, y0.3, epoll.7, icmp.7, nptl.7: tstamp
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2015-04-19 09:20:58 +00:00
|
|
|
.TH NPTL 7 2015-04-19 "Linux" "Linux Programmer's Manual"
|
2015-03-21 21:19:06 +00:00
|
|
|
.SH NAME
|
|
|
|
nptl \- Native POSIX Threads Library
|
|
|
|
.SH DESCRIPTION
|
|
|
|
NPTL (Native POSIX Threads Library)
|
|
|
|
is the GNU C library POSIX threads implementation that is used on modern
|
|
|
|
Linux systems.
|
|
|
|
.\"
|
|
|
|
.SS NPTL and signals
|
|
|
|
NPTL makes internal use of the first two real-time signals
|
|
|
|
(signal numbers 32 and 33).
|
2015-04-06 07:58:16 +00:00
|
|
|
One of these signals is used to support thread cancellation and POSIX timers
|
|
|
|
(see
|
|
|
|
.BR timer_create (2));
|
2015-03-21 21:19:06 +00:00
|
|
|
the other is used as part of a mechanism that ensures all threads in
|
|
|
|
a process always have the same UIDs and GIDs, as required by POSIX.
|
|
|
|
These signals cannot be used in applications.
|
|
|
|
|
|
|
|
To prevent accidental use of these signals in applications,
|
|
|
|
which might interfere with the operation of the NPTL implementation,
|
|
|
|
various glibc library functions and system call wrapper functions
|
|
|
|
attempt to hide these signals from applications,
|
|
|
|
as follows:
|
|
|
|
.IP * 3
|
|
|
|
.B SIGRTMIN
|
|
|
|
is defined with the value 34 (rather than 32).
|
|
|
|
.IP *
|
|
|
|
The
|
|
|
|
.BR sigwaitinfo (2),
|
|
|
|
.BR sigtimedwait (2),
|
|
|
|
and
|
|
|
|
.BR sigwait (3)
|
|
|
|
interfaces silently ignore requests to wait for these two signals
|
|
|
|
if they are specified in the signal set argument of these calls.
|
|
|
|
.IP *
|
|
|
|
The
|
|
|
|
.BR sigprocmask (2)
|
|
|
|
and
|
|
|
|
.BR pthread_sigmask (3)
|
|
|
|
interfaces silently ignore attempts to block these two signals.
|
|
|
|
.IP *
|
|
|
|
The
|
|
|
|
.BR sigaction (2),
|
|
|
|
.BR pthread_kill (3),
|
|
|
|
and
|
|
|
|
.BR pthread_sigqueue (3)
|
|
|
|
interfaces fail with the error
|
|
|
|
.B EINVAL
|
|
|
|
(indicating an invalid signal number) if these signals are specified.
|
|
|
|
.IP *
|
|
|
|
.BR sigfillset (3)
|
|
|
|
does not include these two signals when it creates a full signal set.
|
|
|
|
.\"
|
|
|
|
.SS NPTL and process credential changes
|
|
|
|
At the Linux kernel level,
|
|
|
|
credentials (user and group IDs) are a per-thread attribute.
|
|
|
|
However, POSIX requires that all of the POSIX threads in a process
|
|
|
|
have the same credentials.
|
|
|
|
To accommodate this requirement,
|
|
|
|
the NPTL implementation wraps all of the system calls that
|
|
|
|
change process credentials with functions that,
|
|
|
|
in addition to invoking the underlying system call,
|
|
|
|
arrange for all other threads in the process to also change their credentials.
|
|
|
|
|
2015-03-29 20:31:35 +00:00
|
|
|
The implementation of each of these system calls involves the use of
|
2015-03-21 21:19:06 +00:00
|
|
|
a real-time signal that is sent (using
|
|
|
|
.BR tgkill (2))
|
2015-03-22 19:00:44 +00:00
|
|
|
to each of the other threads that must change its credentials.
|
2015-03-21 21:19:06 +00:00
|
|
|
Before sending these signals, the thread that is changing credentials
|
|
|
|
saves the new credential(s) and records the system call being employed
|
|
|
|
in a global buffer.
|
|
|
|
A signal handler in the receiving thread(s) fetches this information and
|
|
|
|
then uses the same system call to change its credentials.
|
|
|
|
|
|
|
|
Wrapper functions employing this technique are provided for
|
|
|
|
.BR setgid (2),
|
|
|
|
.BR setuid (2),
|
|
|
|
.BR setegid (2),
|
|
|
|
.BR seteuid (2),
|
|
|
|
.BR setregid (2),
|
|
|
|
.BR setreuid (2),
|
|
|
|
.BR setresgid (2),
|
|
|
|
.BR setresuid (2),
|
|
|
|
and
|
|
|
|
.BR setgroups (2).
|
|
|
|
.SH CONFORMING TO
|
|
|
|
For details of the conformance of NPTL to the POSIX standard, see
|
|
|
|
.BR pthreads (7).
|
|
|
|
.SH SEE ALSO
|
|
|
|
.BR credentials (7),
|
|
|
|
.BR pthreads (7),
|
|
|
|
.BR signal (7),
|
|
|
|
.BR standards (7)
|