]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man2/prctl.2
fork.2: SEE ALSO: add exit(2)
[thirdparty/man-pages.git] / man2 / prctl.2
CommitLineData
fea681da
MK
1.\" Hey Emacs! This file is -*- nroff -*- source.
2.\"
3.\" Copyright (C) 1998 Andries Brouwer (aeb@cwi.nl)
c11b1abf 4.\" and Copyright (C) 2002 Michael Kerrisk <mtk.manpages@gmail.com>
af5f9508 5.\" and Copyright Guillem Jover <guillem@hadrons.org>
fea681da
MK
6.\"
7.\" Permission is granted to make and distribute verbatim copies of this
8.\" manual provided the copyright notice and this permission notice are
9.\" preserved on all copies.
10.\"
11.\" Permission is granted to copy and distribute modified versions of this
12.\" manual under the conditions for verbatim copying, provided that the
13.\" entire resulting derived work is distributed under the terms of a
14.\" permission notice identical to this one.
c13182ef 15.\"
fea681da
MK
16.\" Since the Linux kernel and libraries are constantly changing, this
17.\" manual page may be incorrect or out-of-date. The author(s) assume no
18.\" responsibility for errors or omissions, or for damages resulting from
19.\" the use of the information contained herein. The author(s) may not
20.\" have taken the same level of care in the production of this manual,
21.\" which is licensed free of charge, as they might when working
22.\" professionally.
c13182ef 23.\"
fea681da
MK
24.\" Formatted or processed versions of this manual, if unaccompanied by
25.\" the source, must acknowledge the copyright and authors of this work.
26.\"
27.\" Modified Thu Nov 11 04:19:42 MET 1999, aeb: added PR_GET_PDEATHSIG
28.\" Modified 27 Jun 02, Michael Kerrisk
c13182ef 29.\" Added PR_SET_DUMPABLE, PR_GET_DUMPABLE,
fea681da 30.\" PR_SET_KEEPCAPS, PR_GET_KEEPCAPS
e87fdd92
MK
31.\" Modified 2006-08-30 Guillem Jover <guillem@hadrons.org>
32.\" Updated Linux versions where the options where introduced.
33.\" Added PR_SET_TIMING, PR_GET_TIMING, PR_SET_NAME, PR_GET_NAME,
34.\" PR_SET_UNALIGN, PR_GET_UNALIGN, PR_SET_FPEMU, PR_GET_FPEMU,
35.\" PR_SET_FPEXC, PR_GET_FPEXC
8ab8b43f
MK
36.\" 2008-04-29 Serge Hallyn, Document PR_CAPBSET_READ and PR_CAPBSET_DROP
37.\" 2008-06-13 Erik Bosman, <ejbosman@cs.vu.nl>
38.\" Document PR_GET_TSC and PR_SET_TSC.
39.\" 2008-06-15 mtk, Document PR_SET_SECCOMP, PR_GET_SECCOMP
bc02b3ea 40.\" 2009-10-03 Andi Kleen, document PR_MCE_KILL
06afe673 41.\" 2012-04 Cyrill Gorcunov, Document PR_SET_MM
bc02b3ea
MK
42.\" 2012-04-25 Michael Kerrisk, Document PR_TASK_PERF_EVENTS_DISABLE and
43.\" PR_TASK_PERF_EVENTS_ENABLE
34447828 44.\" 2012-09-20 Kees Cook, update PR_SET_SECCOMP for mode 2
f83fe154 45.\" 2012-09-20 Kees Cook, document PR_SET_NO_NEW_PRIVS, PR_GET_NO_NEW_PRIVS
934487a0
MK
46.\" 2012-10-25 Michael Kerrisk, Document PR_SET_TIMERSLACK and
47.\" PR_GET_TIMERSLACK
491b2e75 48.\" 2013-01-10 Kees Cook, document PR_SET_PTRACER
fea681da 49.\"
e14baeeb 50.\"
491b2e75 51.TH PRCTL 2 2013-01-10 "Linux" "Linux Programmer's Manual"
fea681da
MK
52.SH NAME
53prctl \- operations on a process
54.SH SYNOPSIS
521bf584 55.nf
fea681da
MK
56.B #include <sys/prctl.h>
57.sp
521bf584
MK
58.BI "int prctl(int " option ", unsigned long " arg2 ", unsigned long " arg3 ,
59.BI " unsigned long " arg4 ", unsigned long " arg5 );
60.fi
fea681da 61.SH DESCRIPTION
e511ffb6 62.BR prctl ()
fea681da 63is called with a first argument describing what to do
1a329b56 64(with values defined in \fI<linux/prctl.h>\fP), and further
c4bb193f 65arguments with a significance depending on the first one.
fea681da
MK
66The first argument can be:
67.TP
2e781e20 68.BR PR_CAPBSET_READ " (since Linux 2.6.25)"
8ab8b43f
MK
69Return (as the function result) 1 if the capability specified in
70.I arg2
71is in the calling thread's capability bounding set,
72or 0 if it is not.
73(The capability constants are defined in
74.IR <linux/capability.h> .)
75The capability bounding set dictates
76whether the process can receive the capability through a
2914a14d 77file's permitted capability set on a subsequent call to
8ab8b43f
MK
78.BR execve (2).
79
80If the capability specified in
81.I arg2
82is not valid, then the call fails with the error
83.BR EINVAL .
84.TP
85.BR PR_CAPBSET_DROP " (since Linux 2.6.25)"
86If the calling thread has the
87.B CAP_SETPCAP
88capability, then drop the capability specified by
89.I arg2
90from the calling thread's capability bounding set.
91Any children of the calling thread will inherit the newly
92reduced bounding set.
93
94The call fails with the error:
95.B EPERM
2914a14d 96if the calling thread does not have the
8ab8b43f
MK
97.BR CAP_SETPCAP ;
98.BR EINVAL
99if
100.I arg2
101does not represent a valid capability; or
102.BR EINVAL
103if file capabilities are not enabled in the kernel,
104in which case bounding sets are not supported.
105.TP
88989295
MK
106.BR PR_SET_DUMPABLE " (since Linux 2.3.20)"
107Set the state of the flag determining whether core dumps are produced
6f620318 108for the calling process upon delivery of a signal whose default behavior is
88989295 109to produce a core dump.
6f620318 110(Normally, this flag is set for a process by default, but it is cleared
88989295
MK
111when a set-user-ID or set-group-ID program is executed and also by
112various system calls that manipulate process UIDs and GIDs).
113In kernels up to and including 2.6.12,
8ab8b43f 114.I arg2
88989295
MK
115must be either 0 (process is not dumpable) or 1 (process is dumpable).
116Between kernels 2.6.13 and 2.6.17, the value 2 was also permitted,
117which caused any binary which normally would not be dumped
118to be dumped readable by root only;
119for security reasons, this feature has been removed.
120.\" See http://marc.theaimsgroup.com/?l=linux-kernel&m=115270289030630&w=2
121.\" Subject: Fix prctl privilege escalation (CVE-2006-2451)
122.\" From: Marcel Holtmann <marcel () holtmann ! org>
123.\" Date: 2006-07-12 11:12:00
124(See also the description of
125.I /proc/sys/fs/suid_dumpable
126in
127.BR proc (5).)
cadcf1b1 128Processes that are not dumpable can not be attached via
6fdbc779 129.BR ptrace (2)
cadcf1b1 130.BR PTRACE_ATTACH .
64536a1b 131.TP
88989295
MK
132.BR PR_GET_DUMPABLE " (since Linux 2.3.20)"
133Return (as the function result) the current state of the calling
134process's dumpable flag.
135.\" Since Linux 2.6.13, the dumpable flag can have the value 2,
136.\" but in 2.6.13 PR_GET_DUMPABLE simply returns 1 if the dumpable
c7094399 137.\" flags has a nonzero value. This was fixed in 2.6.14.
64536a1b 138.TP
8ab8b43f 139.BR PR_SET_ENDIAN " (since Linux 2.6.18, PowerPC only)"
c13182ef 140Set the endian-ness of the calling process to the value given
64536a1b 141in \fIarg2\fP, which should be one of the following:
8ab8b43f 142.\" Respectively 0, 1, 2
64536a1b
MK
143.BR PR_ENDIAN_BIG ,
144.BR PR_ENDIAN_LITTLE ,
145or
0daa9e92 146.B PR_ENDIAN_PPC_LITTLE
64536a1b 147(PowerPC pseudo little endian).
e87fdd92 148.TP
8ab8b43f
MK
149.BR PR_GET_ENDIAN " (since Linux 2.6.18, PowerPC only)"
150Return the endian-ness of the calling process,
151in the location pointed to by
152.IR "(int\ *) arg2" .
153.TP
8ab8b43f 154.BR PR_SET_FPEMU " (since Linux 2.4.18, 2.5.9, only on ia64)"
e87fdd92
MK
155Set floating-point emulation control bits to \fIarg2\fP.
156Pass \fBPR_FPEMU_NOPRINT\fP to silently emulate fp operations accesses, or
8bd58774
MK
157\fBPR_FPEMU_SIGFPE\fP to not emulate fp operations and send
158.B SIGFPE
159instead.
e87fdd92 160.TP
8ab8b43f
MK
161.BR PR_GET_FPEMU " (since Linux 2.4.18, 2.5.9, only on ia64)"
162Return floating-point emulation control bits,
163in the location pointed to by
164.IR "(int\ *) arg2" .
e87fdd92 165.TP
8ab8b43f 166.BR PR_SET_FPEXC " (since Linux 2.4.21, 2.5.32, only on PowerPC)"
1c44bd5b
MK
167Set floating-point exception mode to \fIarg2\fP.
168Pass \fBPR_FP_EXC_SW_ENABLE\fP to use FPEXC for FP exception enables,
c45bd688
MK
169\fBPR_FP_EXC_DIV\fP for floating-point divide by zero,
170\fBPR_FP_EXC_OVF\fP for floating-point overflow,
171\fBPR_FP_EXC_UND\fP for floating-point underflow,
172\fBPR_FP_EXC_RES\fP for floating-point inexact result,
173\fBPR_FP_EXC_INV\fP for floating-point invalid operation,
e87fdd92 174\fBPR_FP_EXC_DISABLED\fP for FP exceptions disabled,
b28f6e56 175\fBPR_FP_EXC_NONRECOV\fP for async nonrecoverable exception mode,
e87fdd92
MK
176\fBPR_FP_EXC_ASYNC\fP for async recoverable exception mode,
177\fBPR_FP_EXC_PRECISE\fP for precise exception mode.
178.TP
8ab8b43f
MK
179.BR PR_GET_FPEXC " (since Linux 2.4.21, 2.5.32, only on PowerPC)"
180Return floating-point exception mode,
181in the location pointed to by
182.IR "(int\ *) arg2" .
183.TP
88989295
MK
184.BR PR_SET_KEEPCAPS " (since Linux 2.2.18)"
185Set the state of the thread's "keep capabilities" flag,
028cb080
MK
186which determines whether the threads's permitted
187capability set is cleared when a change is made to the threads's user IDs
88989295 188such that the threads's real UID, effective UID, and saved set-user-ID
c7094399 189all become nonzero when at least one of them previously had the value 0.
028cb080
MK
190By default, the permitted capability set is cleared when such a change is made;
191setting the "keep capabilities" flag prevents it from being cleared.
88989295 192.I arg2
028cb080
MK
193must be either 0 (permitted capabilities are cleared)
194or 1 (permitted capabilities are kept).
195(A thread's
196.I effective
197capability set is always cleared when such a credential change is made,
198regardless of the setting of the "keep capabilities" flag.)
199The "keep capabilities" value will be reset to 0 on subsequent calls to
88989295
MK
200.BR execve (2).
201.TP
202.BR PR_GET_KEEPCAPS " (since Linux 2.2.18)"
203Return (as the function result) the current state of the calling threads's
204"keep capabilities" flag.
205.TP
206.BR PR_SET_NAME " (since Linux 2.6.9)"
f49202ae 207Set the process name for the calling thread,
88989295
MK
208using the value in the location pointed to by
209.IR "(char\ *) arg2" .
210The name can be up to 16 bytes long,
211.\" TASK_COMM_LEN in include/linux/sched.h
bd74a873 212and should be null-terminated if it contains fewer bytes.
88989295
MK
213.TP
214.BR PR_GET_NAME " (since Linux 2.6.11)"
f49202ae 215Return the name for the calling thread,
88989295
MK
216in the buffer pointed to by
217.IR "(char\ *) arg2" .
218The buffer should allow space for up to 16 bytes;
bd74a873 219the returned string will be null-terminated if it is shorter than that.
88989295 220.TP
f83fe154 221.BR PR_SET_NO_NEW_PRIVS " (since Linux 3.5)"
0fcc276f
MK
222Set the calling process's
223.I no_new_privs
224bit to the value in
225.IR arg2 .
226With
b1df3071 227.I no_new_privs
0fcc276f
MK
228set to 1,
229.BR execve (2)
b1df3071
MK
230promises not to grant privileges to do anything
231that could not have been done without the
0fcc276f 232.BR execve (2)
b1df3071
MK
233call (for example,
234rendering the set-user-ID and set-group-ID permission bits,
235and file capabilities non-functional).
236Once set, this bit cannot be unset.
237The setting of this bit is inherited by children created by
238.BR fork (2)
0fcc276f 239and
b1df3071
MK
240.BR clone (2),
241and preserved across
242.BR execve (2).
19593937
MK
243
244For more information, see the kernel source file
245.IR Documentation/prctl/no_new_privs.txt .
f83fe154
KC
246.TP
247.BR PR_GET_NO_NEW_PRIVS " (since Linux 3.5)"
0fcc276f
MK
248Return the value of the
249.I no_new_privs
250bit for the current process.
251A value of 0 indicates the regular
252.BR execve (2)
253behavior.
254A value of 1 indicates
255.BR execve (2)
b1df3071 256will operate in the privilege-restricting mode described above.
f83fe154 257.TP
88989295
MK
258.BR PR_SET_PDEATHSIG " (since Linux 2.1.57)"
259Set the parent process death signal
260of the calling process to \fIarg2\fP (either a signal value
261in the range 1..maxsig, or 0 to clear).
262This is the signal that the calling process will get when its
263parent dies.
264This value is cleared for the child of a
c7c7235c 265.BR fork (2)
46b7f60e 266and (since Linux 2.4.36 / 2.6.23)
f49202ae 267when executing a set-user-ID or set-group-ID binary.
88989295
MK
268.TP
269.BR PR_GET_PDEATHSIG " (since Linux 2.3.15)"
270Return the current value of the parent process death signal,
271in the location pointed to by
272.IR "(int\ *) arg2" .
273.TP
491b2e75 274.BR PR_SET_PTRACER " (since Linux 3.4)"
ff03be9a
MK
275.\" commit 2d514487faf188938a4ee4fb3464eeecfbdcf8eb
276.\" commit bf06189e4d14641c0148bea16e9dd24943862215
491b2e75
KC
277This is only meaningful when the Yama LSM is enabled and in mode 1
278("restricted ptrace", visible via
279.IR /proc/sys/kernel/yama/ptrace_scope ).
2c7d476b
MK
280When a "ptracer process ID" is passed in \fIarg2\fP,
281the caller is declaring that the ptracer process can
282.BR ptrace (2)
283the calling process as if it were a direct process ancestor.
9f4cec52
MK
284Each
285.B PR_SET_PTRACER
286operation replaces the previous "ptracer process ID".
2c7d476b
MK
287Employing
288.B PR_SET_PTRACER
289with
290.I arg2
291set to 0 clears the caller's "ptracer process ID".
292If
293.I arg2
294is
491b2e75
KC
295.BR PR_SET_PTRACER_ANY,
296the ptrace restrictions introduced by Yama are effectively disabled for the
2c7d476b 297calling process.
491b2e75
KC
298
299For further information, see the kernel source file
300.IR Documentation/security/Yama.txt .
301.TP
8ab8b43f
MK
302.BR PR_SET_SECCOMP " (since Linux 2.6.23)"
303.\" See http://thread.gmane.org/gmane.linux.kernel/542632
304.\" [PATCH 0 of 2] seccomp updates
305.\" andrea@cpushare.com
d6ef3d57
MK
306Set the secure computing (seccomp) mode for the calling thread, to limit
307the available system calls.
34447828
KC
308The seccomp mode is selected via
309.IR arg2 .
310(The seccomp constants are defined in
311.IR <linux/seccomp.h> .)
312
313With
8ab8b43f 314.IR arg2
34447828
KC
315set to
316.BR SECCOMP_MODE_STRICT
8ab8b43f
MK
317the only system calls that the thread is permitted to make are
318.BR read (2),
319.BR write (2),