man-pages/man2/prctl.2

239 lines
8.2 KiB
Groff

.\" Hey Emacs! This file is -*- nroff -*- source.
.\"
.\" Copyright (C) 1998 Andries Brouwer (aeb@cwi.nl)
.\" and Copyright (C) 2002 Michael Kerrisk <mtk.manpages@gmail.com>
.\" and Copyright Guillem Jover <guillem@hadrons.org>
.\"
.\" 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.
.\"
.\" Modified Thu Nov 11 04:19:42 MET 1999, aeb: added PR_GET_PDEATHSIG
.\" Modified 27 Jun 02, Michael Kerrisk
.\" Added PR_SET_DUMPABLE, PR_GET_DUMPABLE,
.\" PR_SET_KEEPCAPS, PR_GET_KEEPCAPS
.\" Modified 2006-08-30 Guillem Jover <guillem@hadrons.org>
.\" Updated Linux versions where the options where introduced.
.\" Added PR_SET_TIMING, PR_GET_TIMING, PR_SET_NAME, PR_GET_NAME,
.\" PR_SET_UNALIGN, PR_GET_UNALIGN, PR_SET_FPEMU, PR_GET_FPEMU,
.\" PR_SET_FPEXC, PR_GET_FPEXC
.\"
.TH PRCTL 2 2007-07-27 "Linux" "Linux Programmer's Manual"
.SH NAME
prctl \- operations on a process
.SH SYNOPSIS
.nf
.B #include <sys/prctl.h>
.sp
.BI "int prctl(int " option ", unsigned long " arg2 ", unsigned long " arg3 ,
.BI " unsigned long " arg4 ", unsigned long " arg5 );
.fi
.SH DESCRIPTION
.BR prctl ()
is called with a first argument describing what to do
(with values defined in <\fIlinux/prctl.h\fP>), and further
parameters with a significance depending on the first one.
The first argument can be:
.TP
.B PR_SET_PDEATHSIG
(since Linux 2.1.57)
Set the parent process death signal
of the calling process to \fIarg2\fP (either a signal value
in the range 1..maxsig, or 0 to clear).
This is the signal that the calling process will get when its
parent dies.
This value is cleared upon a
.BR fork (2).
.TP
.B PR_GET_PDEATHSIG
(Since Linux 2.3.15)
Read the current value of the parent process death signal
into the (int *) \fIarg2\fP.
.TP
.B PR_SET_DUMPABLE
(Since Linux 2.3.20)
Set the state of the flag determining whether core dumps are produced
for this process upon delivery of a signal whose default behavior is
to produce a core dump.
(Normally this flag is set for a process by default, but it is cleared
when a set-user-ID or set-group-ID program is executed and also by
various system calls that manipulate process UIDs and GIDs).
In kernels up to and including 2.6.12,
.I arg2
must be either 0 (process is not dumpable) or 1 (process is dumpable).
Between kernels 2.6.13 and 2.6.17, the value 2 was also permitted,
which caused any binary which normally would not be dumped
to be dumped readable by root only;
for security reasons, this feature has been removed.
.\" See http://marc.theaimsgroup.com/?l=linux-kernel&m=115270289030630&w=2
.\" Subject: Fix prctl privilege escalation (CVE-2006-2451)
.\" From: Marcel Holtmann <marcel () holtmann ! org>
.\" Date: 2006-07-12 11:12:00
(See also the description of
.I /proc/sys/fs/suid_dumpable
in
.BR proc (5).)
.TP
.B PR_GET_DUMPABLE
(Since Linux 2.3.20)
Return (as the function result) the current state of the calling
process's dumpable flag.
.\" Since Linux 2.6.13, the dumpable flag can have the value 2,
.\" but in 2.6.13 PR_GET_DUMPABLE simply returns 1 if the dumpable
.\" flags has a non-zero value. This was fixed in 2.6.14.
.TP
.B PR_SET_KEEPCAPS
(Since Linux 2.2.18)
Set the state of the process's "keep capabilities" flag,
which determines whether the process's effective and permitted
capability sets are cleared when a change is made to the process's user IDs
such that the process's real UID, effective UID, and saved set-user-ID
all become non-zero when at least one of them previously had the value 0.
(By default, these credential sets are cleared).
.I arg2
must be either 0 (capabilities are cleared) or 1 (capabilities are kept).
.TP
.B PR_GET_KEEPCAPS
(Since Linux 2.2.18)
Return (as the function result) the current state of the calling process's
"keep capabilities" flag.
.TP
.B PR_SET_TIMING
(Since Linux 2.6.0-test4)
Set whether to use (normal, traditional) statistical process timing or
accurate timestamp based process timing, by passing \fBPR_TIMING_STATISTICAL\fP
or \fBPR_TIMING_TIMESTAMP\fP to \fIarg2\fP.
.TP
.B PR_GET_TIMING
(Since Linux 2.6.0-test4)
Return (as the function result) which process timing method is currently
in use.
.TP
.B PR_SET_NAME
(Since Linux 2.6.9)
Set the process name for the calling process to \fIarg2\fP.
.TP
.B PR_GET_NAME
(Since Linux 2.6.11)
Get the process name for the calling process from \fIarg2\fP.
.TP
.B PR_GET_ENDIAN
(Since Linux 2.6.18, PowerPC only)
Return the endian-ness of the calling process.
.TP
.B PR_SET_ENDIAN
(Since Linux 2.6.18, PowerPC only)
Set the endian-ness of the calling process to the value given
in \fIarg2\fP, which should be one of the following:
.BR PR_ENDIAN_BIG ,
.BR PR_ENDIAN_LITTLE ,
or
.BR PR_ENDIAN_PPC_LITTLE
(PowerPC pseudo little endian).
.TP
.B PR_SET_UNALIGN
(Only on: ia64, since Linux 2.3.48; parisc, since Linux 2.6.15;
PowerPC, since Linux 2.6.18)
.\" FIXME . On alpha in 2.6.22-rc4?
Set unaligned access control bits to \fIarg2\fP.
Pass
\fBPR_UNALIGN_NOPRINT\fP to silently fix up unaligned user accesses,
or \fBPR_UNALIGN_SIGBUS\fP to generate
.B SIGBUS
on unaligned user access.
.TP
.B PR_GET_UNALIGN
(see
.B PR_SET_UNALIGN
for information on versions and architectures)
Get unaligned access control bits from \fIarg2\fP.
.TP
.B PR_SET_FPEMU
(Since Linux 2.4.18, 2.5.9, only on ia64)
Set floating-point emulation control bits to \fIarg2\fP.
Pass \fBPR_FPEMU_NOPRINT\fP to silently emulate fp operations accesses, or
\fBPR_FPEMU_SIGFPE\fP to not emulate fp operations and send
.B SIGFPE
instead.
.TP
.B PR_GET_FPEMU
(Since Linux 2.4.18, 2.5.9, only on ia64)
Get floating-point emulation control bits from \fIarg2\fP.
.TP
.B PR_SET_FPEXC
(Since Linux 2.4.21, 2.5.32, only on PowerPC)
Set floating-point exception mode to \fIarg2\fP.
Pass \fBPR_FP_EXC_SW_ENABLE\fP to use FPEXC for FP exception enables,
\fBPR_FP_EXC_DIV\fP for floating point divide by zero,
\fBPR_FP_EXC_OVF\fP for floating point overflow,
\fBPR_FP_EXC_UND\fP for floating point underflow,
\fBPR_FP_EXC_RES\fP for floating point inexact result,
\fBPR_FP_EXC_INV\fP for floating point invalid operation,
\fBPR_FP_EXC_DISABLED\fP for FP exceptions disabled,
\fBPR_FP_EXC_NONRECOV\fP for async non-recoverable exception mode,
\fBPR_FP_EXC_ASYNC\fP for async recoverable exception mode,
\fBPR_FP_EXC_PRECISE\fP for precise exception mode.
.TP
.B PR_GET_FPEXC
(Since Linux 2.4.21, 2.5.32, only on PowerPC)
Get floating-point exception mode from \fIarg2\fP.
.SH "RETURN VALUE"
.B PR_GET_DUMPABLE
and
.B PR_GET_KEEPCAPS
return 0 or 1 on success.
All other
.I option
values return 0 on success.
On error, \-1 is returned, and
.I errno
is set appropriately.
.SH ERRORS
.TP
.B EINVAL
The value of
.I option
is not recognized, or it is
.B PR_SET_PDEATHSIG
and
.I arg2
is not zero or a signal number.
.SH VERSIONS
The
.BR prctl ()
system call was introduced in Linux 2.1.57.
.\" The library interface was added in glibc 2.0.6
.SH "CONFORMING TO"
This call is Linux specific.
IRIX has a
.BR prctl ()
system call (also introduced in Linux 2.1.44
as irix_prctl on the MIPS architecture),
with prototype
.sp
.BI "ptrdiff_t prctl(int " option ", int " arg2 ", int " arg3 );
.sp
and options to get the maximum number of processes per user,
get the maximum number of processors the calling process can use,
find out whether a specified process is currently blocked,
get or set the maximum stack size, etc.
.SH "SEE ALSO"
.BR signal (2),
.BR core (5)