diff options
Diffstat (limited to 'man2/prctl.2')
-rw-r--r-- | man2/prctl.2 | 2577 |
1 files changed, 0 insertions, 2577 deletions
diff --git a/man2/prctl.2 b/man2/prctl.2 deleted file mode 100644 index c6dae6d..0000000 --- a/man2/prctl.2 +++ /dev/null @@ -1,2577 +0,0 @@ -.\" Copyright (C) 1998 Andries Brouwer (aeb@cwi.nl) -.\" and Copyright (C) 2002, 2006, 2008, 2012, 2013, 2015 Michael Kerrisk <mtk.manpages@gmail.com> -.\" and Copyright Guillem Jover <guillem@hadrons.org> -.\" and Copyright (C) 2010 Andi Kleen <andi@firstfloor.org> -.\" and Copyright (C) 2012 Cyrill Gorcunov <gorcunov@openvz.org> -.\" and Copyright (C) 2014 Dave Hansen / Intel -.\" and Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com> -.\" and Copyright (c) 2018 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> -.\" and Copyright (c) 2020 Dave Martin <Dave.Martin@arm.com> -.\" -.\" SPDX-License-Identifier: Linux-man-pages-copyleft -.\" -.\" 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 -.\" 2008-04-29 Serge Hallyn, Document PR_CAPBSET_READ and PR_CAPBSET_DROP -.\" 2008-06-13 Erik Bosman, <ejbosman@cs.vu.nl> -.\" Document PR_GET_TSC and PR_SET_TSC. -.\" 2008-06-15 mtk, Document PR_SET_SECCOMP, PR_GET_SECCOMP -.\" 2009-10-03 Andi Kleen, document PR_MCE_KILL -.\" 2012-04 Cyrill Gorcunov, Document PR_SET_MM -.\" 2012-04-25 Michael Kerrisk, Document PR_TASK_PERF_EVENTS_DISABLE and -.\" PR_TASK_PERF_EVENTS_ENABLE -.\" 2012-09-20 Kees Cook, update PR_SET_SECCOMP for mode 2 -.\" 2012-09-20 Kees Cook, document PR_SET_NO_NEW_PRIVS, PR_GET_NO_NEW_PRIVS -.\" 2012-10-25 Michael Kerrisk, Document PR_SET_TIMERSLACK and -.\" PR_GET_TIMERSLACK -.\" 2013-01-10 Kees Cook, document PR_SET_PTRACER -.\" 2012-02-04 Michael Kerrisk, document PR_{SET,GET}_CHILD_SUBREAPER -.\" 2014-11-10 Dave Hansen, document PR_MPX_{EN,DIS}ABLE_MANAGEMENT -.\" -.\" -.TH prctl 2 2024-03-03 "Linux man-pages 6.7" -.SH NAME -prctl \- operations on a process or thread -.SH LIBRARY -Standard C library -.RI ( libc ", " \-lc ) -.SH SYNOPSIS -.nf -.B #include <sys/prctl.h> -.P -.BI "int prctl(int " op ", ..." -.BI " \fR/*\fP unsigned long " arg2 ", unsigned long " arg3 , -.BI " unsigned long " arg4 ", unsigned long " arg5 " \fR*/\fP );" -.fi -.SH DESCRIPTION -.BR prctl () -manipulates various aspects of the behavior -of the calling thread or process. -.P -Note that careless use of some -.BR prctl () -operations can confuse the user-space run-time environment, -so these operations should be used with care. -.P -.BR prctl () -is called with a first argument describing what to do -(with values defined in \fI<linux/prctl.h>\fP), and further -arguments with a significance depending on the first one. -The first argument can be: -.\" -.\" prctl PR_CAP_AMBIENT -.TP -.BR PR_CAP_AMBIENT " (since Linux 4.3)" -.\" commit 58319057b7847667f0c9585b9de0e8932b0fdb08 -Reads or changes the ambient capability set of the calling thread, -according to the value of -.IR arg2 , -which must be one of the following: -.RS -.\" -.TP -.B PR_CAP_AMBIENT_RAISE -The capability specified in -.I arg3 -is added to the ambient set. -The specified capability must already be present in -both the permitted and the inheritable sets of the process. -This operation is not permitted if the -.B SECBIT_NO_CAP_AMBIENT_RAISE -securebit is set. -.TP -.B PR_CAP_AMBIENT_LOWER -The capability specified in -.I arg3 -is removed from the ambient set. -.TP -.B PR_CAP_AMBIENT_IS_SET -The -.BR prctl () -call returns 1 if the capability in -.I arg3 -is in the ambient set and 0 if it is not. -.TP -.B PR_CAP_AMBIENT_CLEAR_ALL -All capabilities will be removed from the ambient set. -This operation requires setting -.I arg3 -to zero. -.RE -.IP -In all of the above operations, -.I arg4 -and -.I arg5 -must be specified as 0. -.IP -Higher-level interfaces layered on top of the above operations are -provided in the -.BR libcap (3) -library in the form of -.BR cap_get_ambient (3), -.BR cap_set_ambient (3), -and -.BR cap_reset_ambient (3). -.\" prctl PR_CAPBSET_READ -.TP -.BR PR_CAPBSET_READ " (since Linux 2.6.25)" -Return (as the function result) 1 if the capability specified in -.I arg2 -is in the calling thread's capability bounding set, -or 0 if it is not. -(The capability constants are defined in -.IR <linux/capability.h> .) -The capability bounding set dictates -whether the process can receive the capability through a -file's permitted capability set on a subsequent call to -.BR execve (2). -.IP -If the capability specified in -.I arg2 -is not valid, then the call fails with the error -.BR EINVAL . -.IP -A higher-level interface layered on top of this operation is provided in the -.BR libcap (3) -library in the form of -.BR cap_get_bound (3). -.\" prctl PR_CAPBSET_DROP -.TP -.BR PR_CAPBSET_DROP " (since Linux 2.6.25)" -If the calling thread has the -.B CAP_SETPCAP -capability within its user namespace, then drop the capability specified by -.I arg2 -from the calling thread's capability bounding set. -Any children of the calling thread will inherit the newly -reduced bounding set. -.IP -The call fails with the error: -.B EPERM -if the calling thread does not have the -.BR CAP_SETPCAP ; -.B EINVAL -if -.I arg2 -does not represent a valid capability; or -.B EINVAL -if file capabilities are not enabled in the kernel, -in which case bounding sets are not supported. -.IP -A higher-level interface layered on top of this operation is provided in the -.BR libcap (3) -library in the form of -.BR cap_drop_bound (3). -.\" prctl PR_SET_CHILD_SUBREAPER -.TP -.BR PR_SET_CHILD_SUBREAPER " (since Linux 3.4)" -.\" commit ebec18a6d3aa1e7d84aab16225e87fd25170ec2b -If -.I arg2 -is nonzero, -set the "child subreaper" attribute of the calling process; -if -.I arg2 -is zero, unset the attribute. -.IP -A subreaper fulfills the role of -.BR init (1) -for its descendant processes. -When a process becomes orphaned -(i.e., its immediate parent terminates), -then that process will be reparented to -the nearest still living ancestor subreaper. -Subsequently, calls to -.BR getppid (2) -in the orphaned process will now return the PID of the subreaper process, -and when the orphan terminates, it is the subreaper process that -will receive a -.B SIGCHLD -signal and will be able to -.BR wait (2) -on the process to discover its termination status. -.IP -The setting of the "child subreaper" attribute -is not inherited by children created by -.BR fork (2) -and -.BR clone (2). -The setting is preserved across -.BR execve (2). -.IP -Establishing a subreaper process is useful in session management frameworks -where a hierarchical group of processes is managed by a subreaper process -that needs to be informed when one of the processes\[em]for example, -a double-forked daemon\[em]terminates -(perhaps so that it can restart that process). -Some -.BR init (1) -frameworks (e.g., -.BR systemd (1)) -employ a subreaper process for similar reasons. -.\" prctl PR_GET_CHILD_SUBREAPER -.TP -.BR PR_GET_CHILD_SUBREAPER " (since Linux 3.4)" -Return the "child subreaper" setting of the caller, -in the location pointed to by -.IR "(int\~*) arg2" . -.\" prctl PR_SET_DUMPABLE -.TP -.BR PR_SET_DUMPABLE " (since Linux 2.3.20)" -Set the state of the "dumpable" attribute, -which determines whether core dumps are produced for the calling process -upon delivery of a signal whose default behavior is to produce a core dump. -.IP -Up to and including Linux 2.6.12, -.I arg2 -must be either 0 -.RB ( SUID_DUMP_DISABLE , -process is not dumpable) or 1 -.RB ( SUID_DUMP_USER , -process is dumpable). -Between Linux 2.6.13 and Linux 2.6.17, -.\" commit abf75a5033d4da7b8a7e92321d74021d1fcfb502 -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).) -.IP -Normally, the "dumpable" attribute is set to 1. -However, it is reset to the current value contained in the file -.I /proc/sys/fs/\:suid_dumpable -(which by default has the value 0), -in the following circumstances: -.\" See kernel/cred.c::commit_creds() (Linux 3.18 sources) -.RS -.IP \[bu] 3 -The process's effective user or group ID is changed. -.IP \[bu] -The process's filesystem user or group ID is changed (see -.BR credentials (7)). -.IP \[bu] -The process executes -.RB ( execve (2)) -a set-user-ID or set-group-ID program, resulting in a change -of either the effective user ID or the effective group ID. -.IP \[bu] -The process executes -.RB ( execve (2)) -a program that has file capabilities (see -.BR capabilities (7)), -.\" See kernel/cred.c::commit_creds() -but only if the permitted capabilities -gained exceed those already permitted for the process. -.\" Also certain namespace operations; -.RE -.IP -Processes that are not dumpable can not be attached via -.BR ptrace (2) -.BR PTRACE_ATTACH ; -see -.BR ptrace (2) -for further details. -.IP -If a process is not dumpable, -the ownership of files in the process's -.IR /proc/ pid -directory is affected as described in -.BR proc (5). -.\" prctl PR_GET_DUMPABLE -.TP -.BR PR_GET_DUMPABLE " (since Linux 2.3.20)" -Return (as the function result) the current state of the calling -process's dumpable attribute. -.\" Since Linux 2.6.13, the dumpable flag can have the value 2, -.\" but in Linux 2.6.13 PR_GET_DUMPABLE simply returns 1 if the dumpable -.\" flags has a nonzero value. This was fixed in Linux 2.6.14. -.\" prctl PR_SET_ENDIAN -.TP -.BR 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: -.\" Respectively 0, 1, 2 -.BR PR_ENDIAN_BIG , -.BR PR_ENDIAN_LITTLE , -or -.B PR_ENDIAN_PPC_LITTLE -(PowerPC pseudo little endian). -.\" prctl PR_GET_ENDIAN -.TP -.BR PR_GET_ENDIAN " (since Linux 2.6.18, PowerPC only)" -Return the endian-ness of the calling process, -in the location pointed to by -.IR "(int\~*) arg2" . -.\" prctl PR_SET_FP_MODE -.TP -.BR PR_SET_FP_MODE " (since Linux 4.0, only on MIPS)" -.\" commit 9791554b45a2acc28247f66a5fd5bbc212a6b8c8 -On the MIPS architecture, -user-space code can be built using an ABI which permits linking -with code that has more restrictive floating-point (FP) requirements. -For example, user-space code may be built to target the O32 FPXX ABI -and linked with code built for either one of the more restrictive -FP32 or FP64 ABIs. -When more restrictive code is linked in, -the overall requirement for the process is to use the more -restrictive floating-point mode. -.IP -Because the kernel has no means of knowing in advance -which mode the process should be executed in, -and because these restrictions can -change over the lifetime of the process, the -.B PR_SET_FP_MODE -operation is provided to allow control of the floating-point mode -from user space. -.IP -.\" https://dmz-portal.mips.com/wiki/MIPS_O32_ABI_-_FR0_and_FR1_Interlinking -The -.I (unsigned int) arg2 -argument is a bit mask describing the floating-point mode used: -.RS -.TP -.B PR_FP_MODE_FR -When this bit is -.I unset -(so called -.BR FR=0 " or " FR0 -mode), the 32 floating-point registers are 32 bits wide, -and 64-bit registers are represented as a pair of registers -(even- and odd- numbered, -with the even-numbered register containing the lower 32 bits, -and the odd-numbered register containing the higher 32 bits). -.IP -When this bit is -.I set -(on supported hardware), -the 32 floating-point registers are 64 bits wide (so called -.BR FR=1 " or " FR1 -mode). -Note that modern MIPS implementations (MIPS R6 and newer) support -.B FR=1 -mode only. -.IP -Applications that use the O32 FP32 ABI can operate only when this bit is -.I unset -.RB ( FR=0 ; -or they can be used with FRE enabled, see below). -Applications that use the O32 FP64 ABI -(and the O32 FP64A ABI, which exists to -provide the ability to operate with existing FP32 code; see below) -can operate only when this bit is -.I set -.RB ( FR=1 ). -Applications that use the O32 FPXX ABI can operate with either -.B FR=0 -or -.BR FR=1 . -.TP -.B PR_FP_MODE_FRE -Enable emulation of 32-bit floating-point mode. -When this mode is enabled, -it emulates 32-bit floating-point operations -by raising a reserved-instruction exception -on every instruction that uses 32-bit formats and -the kernel then handles the instruction in software. -(The problem lies in the discrepancy of handling odd-numbered registers -which are the high 32 bits of 64-bit registers with even numbers in -.B FR=0 -mode and the lower 32-bit parts of odd-numbered 64-bit registers in -.B FR=1 -mode.) -Enabling this bit is necessary when code with the O32 FP32 ABI should operate -with code with compatible the O32 FPXX or O32 FP64A ABIs (which require -.B FR=1 -FPU mode) or when it is executed on newer hardware (MIPS R6 onwards) -which lacks -.B FR=0 -mode support when a binary with the FP32 ABI is used. -.IP -Note that this mode makes sense only when the FPU is in 64-bit mode -.RB ( FR=1 ). -.IP -Note that the use of emulation inherently has a significant performance hit -and should be avoided if possible. -.RE -.IP -In the N32/N64 ABI, 64-bit floating-point mode is always used, -so FPU emulation is not required and the FPU always operates in -.B FR=1 -mode. -.IP -This operation is mainly intended for use by the dynamic linker -.RB ( ld.so (8)). -.IP -The arguments -.IR arg3 , -.IR arg4 , -and -.I arg5 -are ignored. -.\" prctl PR_GET_FP_MODE -.TP -.BR PR_GET_FP_MODE " (since Linux 4.0, only on MIPS)" -Return (as the function result) -the current floating-point mode (see the description of -.B PR_SET_FP_MODE -for details). -.IP -On success, -the call returns a bit mask which represents the current floating-point mode. -.IP -The arguments -.IR arg2 , -.IR arg3 , -.IR arg4 , -and -.I arg5 -are ignored. -.\" prctl PR_SET_FPEMU -.TP -.BR PR_SET_FPEMU " (since Linux 2.4.18, 2.5.9, only on ia64)" -Set floating-point emulation control bits to \fIarg2\fP. -Pass -.B PR_FPEMU_NOPRINT -to silently emulate floating-point operation accesses, or -.B PR_FPEMU_SIGFPE -to not emulate floating-point operations and send -.B SIGFPE -instead. -.\" prctl PR_GET_FPEMU -.TP -.BR PR_GET_FPEMU " (since Linux 2.4.18, 2.5.9, only on ia64)" -Return floating-point emulation control bits, -in the location pointed to by -.IR "(int\~*) arg2" . -.\" prctl PR_SET_FPEXC -.TP -.BR 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 nonrecoverable exception mode, -\fBPR_FP_EXC_ASYNC\fP for async recoverable exception mode, -\fBPR_FP_EXC_PRECISE\fP for precise exception mode. -.\" prctl PR_GET_FPEXC -.TP -.BR PR_GET_FPEXC " (since Linux 2.4.21, 2.5.32, only on PowerPC)" -Return floating-point exception mode, -in the location pointed to by -.IR "(int\~*) arg2" . -.\" prctl PR_SET_IO_FLUSHER -.TP -.BR PR_SET_IO_FLUSHER " (since Linux 5.6)" -If a user process is involved in the block layer or filesystem I/O path, -and can allocate memory while processing I/O requests it must set -\fIarg2\fP to 1. -This will put the process in the IO_FLUSHER state, -which allows it special treatment to make progress when allocating memory. -If \fIarg2\fP is 0, the process will clear the IO_FLUSHER state, and -the default behavior will be used. -.IP -The calling process must have the -.B CAP_SYS_RESOURCE -capability. -.IP -.IR arg3 , -.IR arg4 , -and -.I arg5 -must be zero. -.IP -The IO_FLUSHER state is inherited by a child process created via -.BR fork (2) -and is preserved across -.BR execve (2). -.IP -Examples of IO_FLUSHER applications are FUSE daemons, SCSI device -emulation daemons, and daemons that perform error handling like multipath -path recovery applications. -.\" prctl PR_GET_IO_FLUSHER -.TP -.B PR_GET_IO_FLUSHER (Since Linux 5.6) -Return (as the function result) the IO_FLUSHER state of the caller. -A value of 1 indicates that the caller is in the IO_FLUSHER state; -0 indicates that the caller is not in the IO_FLUSHER state. -.IP -The calling process must have the -.B CAP_SYS_RESOURCE -capability. -.IP -.IR arg2 , -.IR arg3 , -.IR arg4 , -and -.I arg5 -must be zero. -.\" prctl PR_SET_KEEPCAPS -.TP -.BR PR_SET_KEEPCAPS " (since Linux 2.2.18)" -Set the state of the calling thread's "keep capabilities" flag. -The effect of this flag is described in -.BR capabilities (7). -.I arg2 -must be either 0 (clear the flag) -or 1 (set the flag). -The "keep capabilities" value will be reset to 0 on subsequent calls to -.BR execve (2). -.\" prctl PR_GET_KEEPCAPS -.TP -.BR PR_GET_KEEPCAPS " (since Linux 2.2.18)" -Return (as the function result) the current state of the calling thread's -"keep capabilities" flag. -See -.BR capabilities (7) -for a description of this flag. -.\" prctl PR_MCE_KILL -.TP -.BR PR_MCE_KILL " (since Linux 2.6.32)" -Set the machine check memory corruption kill policy for the calling thread. -If -.I arg2 -is -.BR PR_MCE_KILL_CLEAR , -clear the thread memory corruption kill policy and use the system-wide default. -(The system-wide default is defined by -.IR /proc/sys/vm/memory_failure_early_kill ; -see -.BR proc (5).) -If -.I arg2 -is -.BR PR_MCE_KILL_SET , -use a thread-specific memory corruption kill policy. -In this case, -.I arg3 -defines whether the policy is -.I early kill -.RB ( PR_MCE_KILL_EARLY ), -.I late kill -.RB ( PR_MCE_KILL_LATE ), -or the system-wide default -.RB ( PR_MCE_KILL_DEFAULT ). -Early kill means that the thread receives a -.B SIGBUS -signal as soon as hardware memory corruption is detected inside -its address space. -In late kill mode, the process is killed only when it accesses a corrupted page. -See -.BR sigaction (2) -for more information on the -.B SIGBUS -signal. -The policy is inherited by children. -The remaining unused -.BR prctl () -arguments must be zero for future compatibility. -.\" prctl PR_MCE_KILL_GET -.TP -.BR PR_MCE_KILL_GET " (since Linux 2.6.32)" -Return (as the function result) -the current per-process machine check kill policy. -All unused -.BR prctl () -arguments must be zero. -.\" prctl PR_SET_MM -.TP -.BR PR_SET_MM " (since Linux 3.3)" -.\" commit 028ee4be34a09a6d48bdf30ab991ae933a7bc036 -Modify certain kernel memory map descriptor fields -of the calling process. -Usually these fields are set by the kernel and dynamic loader (see -.BR ld.so (8) -for more information) and a regular application should not use this feature. -However, there are cases, such as self-modifying programs, -where a program might find it useful to change its own memory map. -.IP -The calling process must have the -.B CAP_SYS_RESOURCE -capability. -The value in -.I arg2 -is one of the options below, while -.I arg3 -provides a new value for the option. -The -.I arg4 -and -.I arg5 -arguments must be zero if unused. -.IP -Before Linux 3.10, -.\" commit 52b3694157e3aa6df871e283115652ec6f2d31e0 -this feature is available only if the kernel is built with the -.B CONFIG_CHECKPOINT_RESTORE -option enabled. -.RS -.TP -.B PR_SET_MM_START_CODE -Set the address above which the program text can run. -The corresponding memory area must be readable and executable, -but not writable or shareable (see -.BR mprotect (2) -and -.BR mmap (2) -for more information). -.TP -.B PR_SET_MM_END_CODE -Set the address below which the program text can run. -The corresponding memory area must be readable and executable, -but not writable or shareable. -.TP -.B PR_SET_MM_START_DATA -Set the address above which initialized and -uninitialized (bss) data are placed. -The corresponding memory area must be readable and writable, -but not executable or shareable. -.TP -.B PR_SET_MM_END_DATA -Set the address below which initialized and -uninitialized (bss) data are placed. -The corresponding memory area must be readable and writable, -but not executable or shareable. -.TP -.B PR_SET_MM_START_STACK -Set the start address of the stack. -The corresponding memory area must be readable and writable. -.TP -.B PR_SET_MM_START_BRK -Set the address above which the program heap can be expanded with -.BR brk (2) -call. -The address must be greater than the ending address of -the current program data segment. -In addition, the combined size of the resulting heap and -the size of the data segment can't exceed the -.B RLIMIT_DATA -resource limit (see -.BR setrlimit (2)). -.TP -.B PR_SET_MM_BRK -Set the current -.BR brk (2) -value. -The requirements for the address are the same as for the -.B PR_SET_MM_START_BRK -option. -.P -The following options are available since Linux 3.5. -.\" commit fe8c7f5cbf91124987106faa3bdf0c8b955c4cf7 -.TP -.B PR_SET_MM_ARG_START -Set the address above which the program command line is placed. -.TP -.B PR_SET_MM_ARG_END -Set the address below which the program command line is placed. -.TP -.B PR_SET_MM_ENV_START -Set the address above which the program environment is placed. -.TP -.B PR_SET_MM_ENV_END -Set the address below which the program environment is placed. -.IP -The address passed with -.BR PR_SET_MM_ARG_START , -.BR PR_SET_MM_ARG_END , -.BR PR_SET_MM_ENV_START , -and -.B PR_SET_MM_ENV_END -should belong to a process stack area. -Thus, the corresponding memory area must be readable, writable, and -(depending on the kernel configuration) have the -.B MAP_GROWSDOWN -attribute set (see -.BR mmap (2)). -.TP -.B PR_SET_MM_AUXV -Set a new auxiliary vector. -The -.I arg3 -argument should provide the address of the vector. -The -.I arg4 -is the size of the vector. -.TP -.B PR_SET_MM_EXE_FILE -.\" commit b32dfe377102ce668775f8b6b1461f7ad428f8b6 -Supersede the -.IR /proc/ pid /exe -symbolic link with a new one pointing to a new executable file -identified by the file descriptor provided in -.I arg3 -argument. -The file descriptor should be obtained with a regular -.BR open (2) -call. -.IP -To change the symbolic link, one needs to unmap all existing -executable memory areas, including those created by the kernel itself -(for example the kernel usually creates at least one executable -memory area for the ELF -.I .text -section). -.IP -In Linux 4.9 and earlier, the -.\" commit 3fb4afd9a504c2386b8435028d43283216bf588e -.B PR_SET_MM_EXE_FILE -operation can be performed only once in a process's lifetime; -attempting to perform the operation a second time results in the error -.BR EPERM . -This restriction was enforced for security reasons that were subsequently -deemed specious, -and the restriction was removed in Linux 4.10 because some -user-space applications needed to perform this operation more than once. -.P -The following options are available since Linux 3.18. -.\" commit f606b77f1a9e362451aca8f81d8f36a3a112139e -.TP -.B PR_SET_MM_MAP -Provides one-shot access to all the addresses by passing in a -.I struct prctl_mm_map -(as defined in \fI<linux/prctl.h>\fP). -The -.I arg4 -argument should provide the size of the struct. -.IP -This feature is available only if the kernel is built with the -.B CONFIG_CHECKPOINT_RESTORE -option enabled. -.TP -.B PR_SET_MM_MAP_SIZE -Returns the size of the -.I struct prctl_mm_map -the kernel expects. -This allows user space to find a compatible struct. -The -.I arg4 -argument should be a pointer to an unsigned int. -.IP -This feature is available only if the kernel is built with the -.B CONFIG_CHECKPOINT_RESTORE -option enabled. -.RE -.\" prctl PR_SET_VMA -.TP -.BR PR_SET_VMA " (since Linux 5.17)" -.\" Commit 9a10064f5625d5572c3626c1516e0bebc6c9fe9b -Sets an attribute specified in -.I arg2 -for virtual memory areas starting from the address specified in -.I arg3 -and spanning the size specified in -.IR arg4 . -.I arg5 -specifies the value of the attribute to be set. -.IP -Note that assigning an attribute to a virtual memory area -might prevent it from being merged with adjacent virtual memory areas -due to the difference in that attribute's value. -.IP -Currently, -.I arg2 -must be one of: -.RS -.TP -.B PR_SET_VMA_ANON_NAME -Set a name for anonymous virtual memory areas. -.I arg5 -should be a pointer to a null-terminated string containing the name. -The name length including null byte cannot exceed 80 bytes. -If -.I arg5 -is NULL, the name of the appropriate anonymous virtual memory areas -will be reset. -The name can contain only printable ascii characters (including space), -except \[aq][\[aq], \[aq]]\[aq], \[aq]\e\[aq], \[aq]$\[aq], and \[aq]\[ga]\[aq]. -.RE -.\" prctl PR_MPX_ENABLE_MANAGEMENT -.TP -.B PR_MPX_ENABLE_MANAGEMENT -.TQ -.BR PR_MPX_DISABLE_MANAGEMENT " (since Linux 3.19, removed in Linux 5.4; only on x86)" -.\" commit fe3d197f84319d3bce379a9c0dc17b1f48ad358c -.\" See also http://lwn.net/Articles/582712/ -.\" See also https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler -Enable or disable kernel management of Memory Protection eXtensions (MPX) -bounds tables. -The -.IR arg2 , -.IR arg3 , -.IR arg4 , -and -.I arg5 -.\" commit e9d1b4f3c60997fe197bf0243cb4a41a44387a88 -arguments must be zero. -.IP -MPX is a hardware-assisted mechanism for performing bounds checking on -pointers. -It consists of a set of registers storing bounds information -and a set of special instruction prefixes that tell the CPU on which -instructions it should do bounds enforcement. -There is a limited number of these registers and -when there are more pointers than registers, -their contents must be "spilled" into a set of tables. -These tables are called "bounds tables" and the MPX -.BR prctl () -operations control -whether the kernel manages their allocation and freeing. -.IP -When management is enabled, the kernel will take over allocation -and freeing of the bounds tables. -It does this by trapping the #BR exceptions that result -at first use of missing bounds tables and -instead of delivering the exception to user space, -it allocates the table and populates the bounds directory -with the location of the new table. -For freeing, the kernel checks to see if bounds tables are -present for memory which is not allocated, and frees them if so. -.IP -Before enabling MPX management using -.BR PR_MPX_ENABLE_MANAGEMENT , -the application must first have allocated a user-space buffer for -the bounds directory and placed the location of that directory in the -.I bndcfgu -register. -.IP -These calls fail if the CPU or kernel does not support MPX. -Kernel support for MPX is enabled via the -.B CONFIG_X86_INTEL_MPX -configuration option. -You can check whether the CPU supports MPX by looking for the -.I mpx -CPUID bit, like with the following command: -.IP -.in +4n -.EX -cat /proc/cpuinfo | grep \[aq] mpx \[aq] -.EE -.in -.IP -A thread may not switch in or out of long (64-bit) mode while MPX is -enabled. -.IP -All threads in a process are affected by these calls. -.IP -The child of a -.BR fork (2) -inherits the state of MPX management. -During -.BR execve (2), -MPX management is reset to a state as if -.B PR_MPX_DISABLE_MANAGEMENT -had been called. -.IP -For further information on Intel MPX, see the kernel source file -.IR Documentation/x86/intel_mpx.txt . -.IP -.\" commit f240652b6032b48ad7fa35c5e701cc4c8d697c0b -.\" See also https://lkml.kernel.org/r/20190705175321.DB42F0AD@viggo.jf.intel.com -Due to a lack of toolchain support, -.BR PR_MPX_ENABLE_MANAGEMENT " and " PR_MPX_DISABLE_MANAGEMENT -are not supported in Linux 5.4 and later. -.\" prctl PR_SET_NAME -.TP -.BR PR_SET_NAME " (since Linux 2.6.9)" -Set the name of the calling thread, -using the value in the location pointed to by -.IR "(char\~*) arg2" . -The name can be up to 16 bytes long, -.\" TASK_COMM_LEN in include/linux/sched.h -including the terminating null byte. -(If the length of the string, including the terminating null byte, -exceeds 16 bytes, the string is silently truncated.) -This is the same attribute that can be set via -.BR pthread_setname_np (3) -and retrieved using -.BR pthread_getname_np (3). -The attribute is likewise accessible via -.IR /proc/self/task/ tid /comm -(see -.BR proc (5)), -where -.I tid -is the thread ID of the calling thread, as returned by -.BR gettid (2). -.\" prctl PR_GET_NAME -.TP -.BR PR_GET_NAME " (since Linux 2.6.11)" -Return the name of the calling thread, -in the buffer pointed to by -.IR "(char\~*) arg2" . -The buffer should allow space for up to 16 bytes; -the returned string will be null-terminated. -.\" prctl PR_SET_NO_NEW_PRIVS -.TP -.BR PR_SET_NO_NEW_PRIVS " (since Linux 3.5)" -Set the calling thread's -.I no_new_privs -attribute to the value in -.IR arg2 . -With -.I no_new_privs -set to 1, -.BR execve (2) -promises not to grant privileges to do anything -that could not have been done without the -.BR execve (2) -call (for example, -rendering the set-user-ID and set-group-ID mode bits, -and file capabilities non-functional). -Once set, the -.I no_new_privs -attribute cannot be unset. -The setting of this attribute is inherited by children created by -.BR fork (2) -and -.BR clone (2), -and preserved across -.BR execve (2). -.IP -Since Linux 4.10, -the value of a thread's -.I no_new_privs -attribute can be viewed via the -.I NoNewPrivs -field in the -.IR /proc/ pid /status -file. -.IP -For more information, see the kernel source file -.I Documentation/userspace\-api/no_new_privs.rst -.\" commit 40fde647ccb0ae8c11d256d271e24d385eed595b -(or -.I Documentation/prctl/no_new_privs.txt -before Linux 4.13). -See also -.BR seccomp (2). -.\" prctl PR_GET_NO_NEW_PRIVS -.TP -.BR PR_GET_NO_NEW_PRIVS " (since Linux 3.5)" -Return (as the function result) the value of the -.I no_new_privs -attribute for the calling thread. -A value of 0 indicates the regular -.BR execve (2) -behavior. -A value of 1 indicates -.BR execve (2) -will operate in the privilege-restricting mode described above. -.\" prctl PR_PAC_RESET_KEYS -.\" commit ba830885656414101b2f8ca88786524d4bb5e8c1 -.TP -.BR PR_PAC_RESET_KEYS " (since Linux 5.0, only on arm64)" -Securely reset the thread's pointer authentication keys -to fresh random values generated by the kernel. -.IP -The set of keys to be reset is specified by -.IR arg2 , -which must be a logical OR of zero or more of the following: -.RS -.TP -.B PR_PAC_APIAKEY -instruction authentication key A -.TP -.B PR_PAC_APIBKEY -instruction authentication key B -.TP -.B PR_PAC_APDAKEY -data authentication key A -.TP -.B PR_PAC_APDBKEY -data authentication key B -.TP -.B PR_PAC_APGAKEY -generic authentication \[lq]A\[rq] key. -.IP -(Yes folks, there really is no generic B key.) -.RE -.IP -As a special case, if -.I arg2 -is zero, then all the keys are reset. -Since new keys could be added in future, -this is the recommended way to completely wipe the existing keys -when establishing a clean execution context. -Note that there is no need to use -.B PR_PAC_RESET_KEYS -in preparation for calling -.BR execve (2), -since -.BR execve (2) -resets all the pointer authentication keys. -.IP -The remaining arguments -.IR arg3 ", " arg4 ", and " arg5 -must all be zero. -.IP -If the arguments are invalid, -and in particular if -.I arg2 -contains set bits that are unrecognized -or that correspond to a key not available on this platform, -then the call fails with error -.BR EINVAL . -.IP -.B Warning: -Because the compiler or run-time environment -may be using some or all of the keys, -a successful -.B PR_PAC_RESET_KEYS -may crash the calling process. -The conditions for using it safely are complex and system-dependent. -Don't use it unless you know what you are doing. -.IP -For more information, see the kernel source file -.I Documentation/arm64/pointer\-authentication.rst -.\"commit b693d0b372afb39432e1c49ad7b3454855bc6bed -(or -.I Documentation/arm64/pointer\-authentication.txt -before Linux 5.3). -.\" prctl PR_SET_PDEATHSIG -.TP -.BR PR_SET_PDEATHSIG " (since Linux 2.1.57)" -Set the parent-death signal -of the calling process to \fIarg2\fP (either a signal value -in the range -.RB [ 1 , -.IR NSIG\~\-\~1 ], -or -.B 0 -to clear). -This is the signal that the calling process will get when its -parent dies. -.IP -.IR Warning : -.\" https://bugzilla.kernel.org/show_bug.cgi?id=43300 -the "parent" in this case is considered to be the -.I thread -that created this process. -In other words, the signal will be sent when that thread terminates -(via, for example, -.BR pthread_exit (3)), -rather than after all of the threads in the parent process terminate. -.IP -The parent-death signal is sent upon subsequent termination of the parent -thread and also upon termination of each subreaper process -(see the description of -.B PR_SET_CHILD_SUBREAPER -above) to which the caller is subsequently reparented. -If the parent thread and all ancestor subreapers have already terminated -by the time of the -.B PR_SET_PDEATHSIG -operation, then no parent-death signal is sent to the caller. -.IP -The parent-death signal is process-directed (see -.BR signal (7)) -and, if the child installs a handler using the -.BR sigaction (2) -.B SA_SIGINFO -flag, the -.I si_pid -field of the -.I siginfo_t -argument of the handler contains the PID of the terminating parent process. -.IP -The parent-death signal setting is cleared for the child of a -.BR fork (2). -It is also -(since Linux 2.4.36 / 2.6.23) -.\" commit d2d56c5f51028cb9f3d800882eb6f4cbd3f9099f -cleared when executing a set-user-ID or set-group-ID binary, -or a binary that has associated capabilities (see -.BR capabilities (7)); -otherwise, this value is preserved across -.BR execve (2). -The parent-death signal setting is also cleared upon changes to -any of the following thread credentials: -.\" FIXME capability changes can also trigger this; see -.\" kernel/cred.c::commit_creds in the Linux 5.6 source. -effective user ID, effective group ID, filesystem user ID, -or filesystem group ID. -.\" prctl PR_GET_PDEATHSIG -.TP -.BR PR_GET_PDEATHSIG " (since Linux 2.3.15)" -Return the current value of the parent process death signal, -in the location pointed to by -.IR "(int\~*) arg2" . -.\" prctl PR_SET_PTRACER -.TP -.BR PR_SET_PTRACER " (since Linux 3.4)" -.\" commit 2d514487faf188938a4ee4fb3464eeecfbdcf8eb -.\" commit bf06189e4d14641c0148bea16e9dd24943862215 -This is meaningful only when the Yama LSM is enabled and in mode 1 -("restricted ptrace", visible via -.IR /proc/sys/kernel/yama/ptrace_scope ). -When a "ptracer process ID" is passed in \fIarg2\fP, -the caller is declaring that the ptracer process can -.BR ptrace (2) -the calling process as if it were a direct process ancestor. -Each -.B PR_SET_PTRACER -operation replaces the previous "ptracer process ID". -Employing -.B PR_SET_PTRACER -with -.I arg2 -set to 0 clears the caller's "ptracer process ID". -If -.I arg2 -is -.BR PR_SET_PTRACER_ANY , -the ptrace restrictions introduced by Yama are effectively disabled for the -calling process. -.IP -For further information, see the kernel source file -.I Documentation/admin\-guide/LSM/Yama.rst -.\" commit 90bb766440f2147486a2acc3e793d7b8348b0c22 -(or -.I Documentation/security/Yama.txt -before Linux 4.13). -.\" prctl PR_SET_SECCOMP -.TP -.BR PR_SET_SECCOMP " (since Linux 2.6.23)" -.\" See http://thread.gmane.org/gmane.linux.kernel/542632 -.\" [PATCH 0 of 2] seccomp updates -.\" andrea@cpushare.com -Set the secure computing (seccomp) mode for the calling thread, to limit -the available system calls. -The more recent -.BR seccomp (2) -system call provides a superset of the functionality of -.BR PR_SET_SECCOMP , -and is the preferred interface for new applications. -.IP -The seccomp mode is selected via -.IR arg2 . -(The seccomp constants are defined in -.IR <linux/seccomp.h> .) -The following values can be specified: -.RS -.TP -.BR SECCOMP_MODE_STRICT " (since Linux 2.6.23)" -See the description of -.B SECCOMP_SET_MODE_STRICT -in -.BR seccomp (2). -.IP -This operation is available only -if the kernel is configured with -.B CONFIG_SECCOMP -enabled. -.TP -.BR SECCOMP_MODE_FILTER " (since Linux 3.5)" -The allowed system calls are defined by a pointer -to a Berkeley Packet Filter passed in -.IR arg3 . -This argument is a pointer to -.IR "struct sock_fprog" ; -it can be designed to filter -arbitrary system calls and system call arguments. -See the description of -.B SECCOMP_SET_MODE_FILTER -in -.BR seccomp (2). -.IP -This operation is available only -if the kernel is configured with -.B CONFIG_SECCOMP_FILTER -enabled. -.RE -.IP -For further details on seccomp filtering, see -.BR seccomp (2). -.\" prctl PR_GET_SECCOMP -.TP -.BR PR_GET_SECCOMP " (since Linux 2.6.23)" -Return (as the function result) -the secure computing mode of the calling thread. -If the caller is not in secure computing mode, this operation returns 0; -if the caller is in strict secure computing mode, then the -.BR prctl () -call will cause a -.B SIGKILL -signal to be sent to the process. -If the caller is in filter mode, and this system call is allowed by the -seccomp filters, it returns 2; otherwise, the process is killed with a -.B SIGKILL -signal. -.IP -This operation is available only -if the kernel is configured with -.B CONFIG_SECCOMP -enabled. -.IP -Since Linux 3.8, the -.I Seccomp -field of the -.IR /proc/ pid /status -file provides a method of obtaining the same information, -without the risk that the process is killed; see -.BR proc (5). -.\" prctl PR_SET_SECUREBITS -.TP -.BR PR_SET_SECUREBITS " (since Linux 2.6.26)" -Set the "securebits" flags of the calling thread to the value supplied in -.IR arg2 . -See -.BR capabilities (7). -.\" prctl PR_GET_SECUREBITS -.TP -.BR PR_GET_SECUREBITS " (since Linux 2.6.26)" -Return (as the function result) -the "securebits" flags of the calling thread. -See -.BR capabilities (7). -.\" prctl PR_GET_SPECULATION_CTRL -.TP -.BR PR_GET_SPECULATION_CTRL " (since Linux 4.17)" -Return (as the function result) -the state of the speculation misfeature specified in -.IR arg2 . -Currently, the only permitted value for this argument is -.B PR_SPEC_STORE_BYPASS -(otherwise the call fails with the error -.BR ENODEV ). -.IP -The return value uses bits 0-3 with the following meaning: -.RS -.TP -.B PR_SPEC_PRCTL -Mitigation can be controlled per thread by -.BR PR_SET_SPECULATION_CTRL . -.TP -.B PR_SPEC_ENABLE -The speculation feature is enabled, mitigation is disabled. -.TP -.B PR_SPEC_DISABLE -The speculation feature is disabled, mitigation is enabled. -.TP -.B PR_SPEC_FORCE_DISABLE -Same as -.B PR_SPEC_DISABLE -but cannot be undone. -.TP -.BR PR_SPEC_DISABLE_NOEXEC " (since Linux 5.1)" -Same as -.BR PR_SPEC_DISABLE , -but the state will be cleared on -.BR execve (2). -.RE -.IP -If all bits are 0, -then the CPU is not affected by the speculation misfeature. -.IP -If -.B PR_SPEC_PRCTL -is set, then per-thread control of the mitigation is available. -If not set, -.BR prctl () -for the speculation misfeature will fail. -.IP -The -.IR arg3 , -.IR arg4 , -and -.I arg5 -arguments must be specified as 0; otherwise the call fails with the error -.BR EINVAL . -.\" prctl PR_SET_SPECULATION_CTRL -.TP -.BR PR_SET_SPECULATION_CTRL " (since Linux 4.17)" -.\" commit b617cfc858161140d69cc0b5cc211996b557a1c7 -.\" commit 356e4bfff2c5489e016fdb925adbf12a1e3950ee -Sets the state of the speculation misfeature specified in -.IR arg2 . -The speculation-misfeature settings are per-thread attributes. -.IP -Currently, -.I arg2 -must be one of: -.RS -.TP -.B PR_SPEC_STORE_BYPASS -Set the state of the speculative store bypass misfeature. -.\" commit 9137bb27e60e554dab694eafa4cca241fa3a694f -.TP -.BR PR_SPEC_INDIRECT_BRANCH " (since Linux 4.20)" -Set the state of the indirect branch speculation misfeature. -.RE -.IP -If -.I arg2 -does not have one of the above values, -then the call fails with the error -.BR ENODEV . -.IP -The -.I arg3 -argument is used to hand in the control value, -which is one of the following: -.RS -.TP -.B PR_SPEC_ENABLE -The speculation feature is enabled, mitigation is disabled. -.TP -.B PR_SPEC_DISABLE -The speculation feature is disabled, mitigation is enabled. -.TP -.B PR_SPEC_FORCE_DISABLE -Same as -.BR PR_SPEC_DISABLE , -but cannot be undone. -A subsequent -.BR prctl (\c -.IR arg2 , -.BR PR_SPEC_ENABLE ) -with the same value for -.I arg2 -will fail with the error -.BR EPERM . -.\" commit 71368af9027f18fe5d1c6f372cfdff7e4bde8b48 -.TP -.BR PR_SPEC_DISABLE_NOEXEC " (since Linux 5.1)" -Same as -.BR PR_SPEC_DISABLE , -but the state will be cleared on -.BR execve (2). -Currently only supported for -.I arg2 -equal to -.B PR_SPEC_STORE_BYPASS. -.RE -.IP -Any unsupported value in -.I arg3 -will result in the call failing with the error -.BR ERANGE . -.IP -The -.I arg4 -and -.I arg5 -arguments must be specified as 0; otherwise the call fails with the error -.BR EINVAL . -.IP -The speculation feature can also be controlled by the -.B spec_store_bypass_disable -boot parameter. -This parameter may enforce a read-only policy which will result in the -.BR prctl () -call failing with the error -.BR ENXIO . -For further details, see the kernel source file -.IR Documentation/admin\-guide/kernel\-parameters.txt . -.\" prctl PR_SVE_SET_VL -.\" commit 2d2123bc7c7f843aa9db87720de159a049839862 -.\" linux-5.6/Documentation/arm64/sve.rst -.TP -.BR PR_SVE_SET_VL " (since Linux 4.15, only on arm64)" -Configure the thread's SVE vector length, -as specified by -.IR "(int) arg2" . -Arguments -.IR arg3 , -.IR arg4 , -and -.I arg5 -are ignored. -.IP -The bits of -.I arg2 -corresponding to -.B PR_SVE_VL_LEN_MASK -must be set to the desired vector length in bytes. -This is interpreted as an upper bound: -the kernel will select the greatest available vector length -that does not exceed the value specified. -In particular, specifying -.B SVE_VL_MAX -(defined in -.I <asm/sigcontext.h>) -for the -.B PR_SVE_VL_LEN_MASK -bits requests the maximum supported vector length. -.IP -In addition, the other bits of -.I arg2 -must be set to one of the following combinations of flags: -.RS -.TP -.B 0 -Perform the change immediately. -At the next -.BR execve (2) -in the thread, -the vector length will be reset to the value configured in -.IR /proc/sys/abi/sve_default_vector_length . -.TP -.B PR_SVE_VL_INHERIT -Perform the change immediately. -Subsequent -.BR execve (2) -calls will preserve the new vector length. -.TP -.B PR_SVE_SET_VL_ONEXEC -Defer the change, so that it is performed at the next -.BR execve (2) -in the thread. -Further -.BR execve (2) -calls will reset the vector length to the value configured in -.IR /proc/sys/abi/sve_default_vector_length . -.TP -.B "PR_SVE_SET_VL_ONEXEC | PR_SVE_VL_INHERIT" -Defer the change, so that it is performed at the next -.BR execve (2) -in the thread. -Further -.BR execve (2) -calls will preserve the new vector length. -.RE -.IP -In all cases, -any previously pending deferred change is canceled. -.IP -The call fails with error -.B EINVAL -if SVE is not supported on the platform, if -.I arg2 -is unrecognized or invalid, or the value in the bits of -.I arg2 -corresponding to -.B PR_SVE_VL_LEN_MASK -is outside the range -.BR SVE_VL_MIN .. SVE_VL_MAX -or is not a multiple of 16. -.IP -On success, -a nonnegative value is returned that describes the -.I selected -configuration. -If -.B PR_SVE_SET_VL_ONEXEC -was included in -.IR arg2 , -then the configuration described by the return value -will take effect at the next -.BR execve (2). -Otherwise, the configuration is already in effect when the -.B PR_SVE_SET_VL -call returns. -In either case, the value is encoded in the same way as the return value of -.BR PR_SVE_GET_VL . -Note that there is no explicit flag in the return value -corresponding to -.BR PR_SVE_SET_VL_ONEXEC . -.IP -The configuration (including any pending deferred change) -is inherited across -.BR fork (2) -and -.BR clone (2). -.IP -For more information, see the kernel source file -.I Documentation/arm64/sve.rst -.\"commit b693d0b372afb39432e1c49ad7b3454855bc6bed -(or -.I Documentation/arm64/sve.txt -before Linux 5.3). -.IP -.B Warning: -Because the compiler or run-time environment -may be using SVE, using this call without the -.B PR_SVE_SET_VL_ONEXEC -flag may crash the calling process. -The conditions for using it safely are complex and system-dependent. -Don't use it unless you really know what you are doing. -.\" prctl PR_SVE_GET_VL -.TP -.BR PR_SVE_GET_VL " (since Linux 4.15, only on arm64)" -Get the thread's current SVE vector length configuration. -.IP -Arguments -.IR arg2 ", " arg3 ", " arg4 ", and " arg5 -are ignored. -.IP -Provided that the kernel and platform support SVE, -this operation always succeeds, -returning a nonnegative value that describes the -.I current -configuration. -The bits corresponding to -.B PR_SVE_VL_LEN_MASK -contain the currently configured vector length in bytes. -The bit corresponding to -.B PR_SVE_VL_INHERIT -indicates whether the vector length will be inherited -across -.BR execve (2). -.IP -Note that there is no way to determine whether there is -a pending vector length change that has not yet taken effect. -.IP -For more information, see the kernel source file -.I Documentation/arm64/sve.rst -.\"commit b693d0b372afb39432e1c49ad7b3454855bc6bed -(or -.I Documentation/arm64/sve.txt -before Linux 5.3). -.TP -.\" prctl PR_SET_SYSCALL_USER_DISPATCH -.\" commit 1446e1df9eb183fdf81c3f0715402f1d7595d4 -.BR PR_SET_SYSCALL_USER_DISPATCH " (since Linux 5.11, x86 only)" -Configure the Syscall User Dispatch mechanism -for the calling thread. -This mechanism allows an application -to selectively intercept system calls -so that they can be handled within the application itself. -Interception takes the form of a thread-directed -.B SIGSYS -signal that is delivered to the thread -when it makes a system call. -If intercepted, -the system call is not executed by the kernel. -.IP -To enable this mechanism, -.I arg2 -should be set to -.BR PR_SYS_DISPATCH_ON . -Once enabled, further system calls will be selectively intercepted, -depending on a control variable provided by user space. -In this case, -.I arg3 -and -.I arg4 -respectively identify the -.I offset -and -.I length -of a single contiguous memory region in the process address space -from where system calls are always allowed to be executed, -regardless of the control variable. -(Typically, this area would include the area of memory -containing the C library.) -.IP -.I arg5 -points to a char-sized variable -that is a fast switch to allow/block system call execution -without the overhead of doing another system call -to re-configure Syscall User Dispatch. -This control variable can either be set to -.B SYSCALL_DISPATCH_FILTER_BLOCK -to block system calls from executing -or to -.B SYSCALL_DISPATCH_FILTER_ALLOW -to temporarily allow them to be executed. -This value is checked by the kernel -on every system call entry, -and any unexpected value will raise -an uncatchable -.B SIGSYS -at that time, -killing the application. -.IP -When a system call is intercepted, -the kernel sends a thread-directed -.B SIGSYS -signal to the triggering thread. -Various fields will be set in the -.I siginfo_t -structure (see -.BR sigaction (2)) -associated with the signal: -.RS -.IP \[bu] 3 -.I si_signo -will contain -.BR SIGSYS . -.IP \[bu] -.I si_call_addr -will show the address of the system call instruction. -.IP \[bu] -.I si_syscall -and -.I si_arch -will indicate which system call was attempted. -.IP \[bu] -.I si_code -will contain -.BR SYS_USER_DISPATCH . -.IP \[bu] -.I si_errno -will be set to 0. -.RE -.IP -The program counter will be as though the system call happened -(i.e., the program counter will not point to the system call instruction). -.IP -When the signal handler returns to the kernel, -the system call completes immediately -and returns to the calling thread, -without actually being executed. -If necessary -(i.e., when emulating the system call on user space.), -the signal handler should set the system call return value -to a sane value, -by modifying the register context stored in the -.I ucontext -argument of the signal handler. -See -.BR sigaction (2), -.BR sigreturn (2), -and -.BR getcontext (3) -for more information. -.IP -If -.I arg2 -is set to -.BR PR_SYS_DISPATCH_OFF , -Syscall User Dispatch is disabled for that thread. -the remaining arguments must be set to 0. -.IP -The setting is not preserved across -.BR fork (2), -.BR clone (2), -or -.BR execve (2). -.IP -For more information, -see the kernel source file -.I Documentation/admin\-guide/syscall\-user\-dispatch.rst -.\" prctl PR_SET_TAGGED_ADDR_CTRL -.\" commit 63f0c60379650d82250f22e4cf4137ef3dc4f43d -.TP -.BR PR_SET_TAGGED_ADDR_CTRL " (since Linux 5.4, only on arm64)" -Controls support for passing tagged user-space addresses to the kernel -(i.e., addresses where bits 56\[em]63 are not all zero). -.IP -The level of support is selected by -.IR "arg2" , -which can be one of the following: -.RS -.TP -.B 0 -Addresses that are passed -for the purpose of being dereferenced by the kernel -must be untagged. -.TP -.B PR_TAGGED_ADDR_ENABLE -Addresses that are passed -for the purpose of being dereferenced by the kernel -may be tagged, with the exceptions summarized below. -.RE -.IP -The remaining arguments -.IR arg3 ", " arg4 ", and " arg5 -must all be zero. -.\" Enforcement added in -.\" commit 3e91ec89f527b9870fe42dcbdb74fd389d123a95 -.IP -On success, the mode specified in -.I arg2 -is set for the calling thread and the return value is 0. -If the arguments are invalid, -the mode specified in -.I arg2 -is unrecognized, -or if this feature is unsupported by the kernel -or disabled via -.IR /proc/sys/abi/tagged_addr_disabled , -the call fails with the error -.BR EINVAL . -.IP -In particular, if -.BR prctl ( PR_SET_TAGGED_ADDR_CTRL , -0, 0, 0, 0) -fails with -.BR EINVAL , -then all addresses passed to the kernel must be untagged. -.IP -Irrespective of which mode is set, -addresses passed to certain interfaces -must always be untagged: -.RS -.IP \[bu] 3 -.BR brk (2), -.BR mmap (2), -.BR shmat (2), -.BR shmdt (2), -and the -.I new_address -argument of -.BR mremap (2). -.IP -(Prior to Linux 5.6 these accepted tagged addresses, -but the behaviour may not be what you expect. -Don't rely on it.) -.IP \[bu] -\[oq]polymorphic\[cq] interfaces -that accept pointers to arbitrary types cast to a -.I void * -or other generic type, specifically -.BR prctl (), -.BR ioctl (2), -and in general -.BR setsockopt (2) -(only certain specific -.BR setsockopt (2) -options allow tagged addresses). -.RE -.IP -This list of exclusions may shrink -when moving from one kernel version to a later kernel version. -While the kernel may make some guarantees -for backwards compatibility reasons, -for the purposes of new software -the effect of passing tagged addresses to these interfaces -is unspecified. -.IP -The mode set by this call is inherited across -.BR fork (2) -and -.BR clone (2). -The mode is reset by -.BR execve (2) -to 0 -(i.e., tagged addresses not permitted in the user/kernel ABI). -.IP -For more information, see the kernel source file -.IR Documentation/arm64/tagged\-address\-abi.rst . -.IP -.B Warning: -This call is primarily intended for use by the run-time environment. -A successful -.B PR_SET_TAGGED_ADDR_CTRL -call elsewhere may crash the calling process. -The conditions for using it safely are complex and system-dependent. -Don't use it unless you know what you are doing. -.\" prctl PR_GET_TAGGED_ADDR_CTRL -.\" commit 63f0c60379650d82250f22e4cf4137ef3dc4f43d -.TP -.BR PR_GET_TAGGED_ADDR_CTRL " (since Linux 5.4, only on arm64)" -Returns the current tagged address mode -for the calling thread. -.IP -Arguments -.IR arg2 ", " arg3 ", " arg4 ", and " arg5 -must all be zero. -.IP -If the arguments are invalid -or this feature is disabled or unsupported by the kernel, -the call fails with -.BR EINVAL . -In particular, if -.BR prctl ( PR_GET_TAGGED_ADDR_CTRL , -0, 0, 0, 0) -fails with -.BR EINVAL , -then this feature is definitely either unsupported, -or disabled via -.IR /proc/sys/abi/tagged_addr_disabled . -In this case, -all addresses passed to the kernel must be untagged. -.IP -Otherwise, the call returns a nonnegative value -describing the current tagged address mode, -encoded in the same way as the -.I arg2 -argument of -.BR PR_SET_TAGGED_ADDR_CTRL . -.IP -For more information, see the kernel source file -.IR Documentation/arm64/tagged\-address\-abi.rst . -.\" -.\" prctl PR_TASK_PERF_EVENTS_DISABLE -.TP -.BR PR_TASK_PERF_EVENTS_DISABLE " (since Linux 2.6.31)" -Disable all performance counters attached to the calling process, -regardless of whether the counters were created by -this process or another process. -Performance counters created by the calling process for other -processes are unaffected. -For more information on performance counters, see the Linux kernel source file -.IR tools/perf/design.txt . -.IP -Originally called -.BR PR_TASK_PERF_COUNTERS_DISABLE ; -.\" commit 1d1c7ddbfab358445a542715551301b7fc363e28 -renamed (retaining the same numerical value) -in Linux 2.6.32. -.\" -.\" prctl PR_TASK_PERF_EVENTS_ENABLE -.TP -.BR PR_TASK_PERF_EVENTS_ENABLE " (since Linux 2.6.31)" -The converse of -.BR PR_TASK_PERF_EVENTS_DISABLE ; -enable performance counters attached to the calling process. -.IP -Originally called -.BR PR_TASK_PERF_COUNTERS_ENABLE ; -.\" commit 1d1c7ddbfab358445a542715551301b7fc363e28 -renamed -.\" commit cdd6c482c9ff9c55475ee7392ec8f672eddb7be6 -in Linux 2.6.32. -.\" -.\" prctl PR_SET_THP_DISABLE -.TP -.BR PR_SET_THP_DISABLE " (since Linux 3.15)" -.\" commit a0715cc22601e8830ace98366c0c2bd8da52af52 -Set the state of the "THP disable" flag for the calling thread. -If -.I arg2 -has a nonzero value, the flag is set, otherwise it is cleared. -Setting this flag provides a method -for disabling transparent huge pages -for jobs where the code cannot be modified, and using a malloc hook with -.BR madvise (2) -is not an option (i.e., statically allocated data). -The setting of the "THP disable" flag is inherited by a child created via -.BR fork (2) -and is preserved across -.BR execve (2). -.\" prctl PR_GET_THP_DISABLE -.TP -.BR PR_GET_THP_DISABLE " (since Linux 3.15)" -Return (as the function result) the current setting of the "THP disable" -flag for the calling thread: -either 1, if the flag is set, or 0, if it is not. -.\" prctl PR_GET_TID_ADDRESS -.TP -.BR PR_GET_TID_ADDRESS " (since Linux 3.5)" -.\" commit 300f786b2683f8bb1ec0afb6e1851183a479c86d -Return the -.I clear_child_tid -address set by -.BR set_tid_address (2) -and the -.BR clone (2) -.B CLONE_CHILD_CLEARTID -flag, in the location pointed to by -.IR "(int\~**)\~arg2" . -This feature is available only if the kernel is built with the -.B CONFIG_CHECKPOINT_RESTORE -option enabled. -Note that since the -.BR prctl () -system call does not have a compat implementation for -the AMD64 x32 and MIPS n32 ABIs, -and the kernel writes out a pointer using the kernel's pointer size, -this operation expects a user-space buffer of 8 (not 4) bytes on these ABIs. -.\" prctl PR_SET_TIMERSLACK -.TP -.BR PR_SET_TIMERSLACK " (since Linux 2.6.28)" -.\" See https://lwn.net/Articles/369549/ -.\" commit 6976675d94042fbd446231d1bd8b7de71a980ada -Each thread has two associated timer slack values: -a "default" value, and a "current" value. -This operation sets the "current" timer slack value for the calling thread. -.I arg2 -is an unsigned long value, then maximum "current" value is ULONG_MAX and -the minimum "current" value is 1. -If the nanosecond value supplied in -.I arg2 -is greater than zero, then the "current" value is set to this value. -If -.I arg2 -is equal to zero, -the "current" timer slack is reset to the -thread's "default" timer slack value. -.IP -The "current" timer slack is used by the kernel to group timer expirations -for the calling thread that are close to one another; -as a consequence, timer expirations for the thread may be -up to the specified number of nanoseconds late (but will never expire early). -Grouping timer expirations can help reduce system power consumption -by minimizing CPU wake-ups. -.IP -The timer expirations affected by timer slack are those set by -.BR select (2), -.BR pselect (2), -.BR poll (2), -.BR ppoll (2), -.BR epoll_wait (2), -.BR epoll_pwait (2), -.BR clock_nanosleep (2), -.BR nanosleep (2), -and -.BR futex (2) -(and thus the library functions implemented via futexes, including -.\" List obtained by grepping for futex usage in glibc source -.BR pthread_cond_timedwait (3), -.BR pthread_mutex_timedlock (3), -.BR pthread_rwlock_timedrdlock (3), -.BR pthread_rwlock_timedwrlock (3), -and -.BR sem_timedwait (3)). -.IP -Timer slack is not applied to threads that are scheduled under -a real-time scheduling policy (see -.BR sched_setscheduler (2)). -.IP -When a new thread is created, -the two timer slack values are made the same as the "current" value -of the creating thread. -Thereafter, a thread can adjust its "current" timer slack value via -.BR PR_SET_TIMERSLACK . -The "default" value can't be changed. -The timer slack values of -.I init -(PID 1), the ancestor of all processes, -are 50,000 nanoseconds (50 microseconds). -The timer slack value is inherited by a child created via -.BR fork (2), -and is preserved across -.BR execve (2). -.IP -Since Linux 4.6, the "current" timer slack value of any process -can be examined and changed via the file -.IR /proc/ pid /timerslack_ns . -See -.BR proc (5). -.\" prctl PR_GET_TIMERSLACK -.TP -.BR PR_GET_TIMERSLACK " (since Linux 2.6.28)" -Return (as the function result) -the "current" timer slack value of the calling thread. -.\" prctl PR_SET_TIMING -.TP -.BR PR_SET_TIMING " (since Linux 2.6.0)" -.\" Precisely: Linux 2.6.0-test4 -Set whether to use (normal, traditional) statistical process timing or -accurate timestamp-based process timing, by passing -.B PR_TIMING_STATISTICAL -.\" 0 -or -.B PR_TIMING_TIMESTAMP -.\" 1 -to \fIarg2\fP. -.B PR_TIMING_TIMESTAMP -is not currently implemented -(attempting to set this mode will yield the error -.BR EINVAL ). -.\" PR_TIMING_TIMESTAMP doesn't do anything in Linux 2.6.26-rc8, -.\" and looking at the patch history, it appears -.\" that it never did anything. -.\" prctl PR_GET_TIMING -.TP -.BR PR_GET_TIMING " (since Linux 2.6.0)" -.\" Precisely: Linux 2.6.0-test4 -Return (as the function result) which process timing method is currently -in use. -.\" prctl PR_SET_TSC -.TP -.BR PR_SET_TSC " (since Linux 2.6.26, x86 only)" -Set the state of the flag determining whether the timestamp counter -can be read by the process. -Pass -.B PR_TSC_ENABLE -to -.I arg2 -to allow it to be read, or -.B PR_TSC_SIGSEGV -to generate a -.B SIGSEGV -when the process tries to read the timestamp counter. -.\" prctl PR_GET_TSC -.TP -.BR PR_GET_TSC " (since Linux 2.6.26, x86 only)" -Return the state of the flag determining whether the timestamp counter -can be read, -in the location pointed to by -.IR "(int\~*) arg2" . -.\" prctl PR_SET_UNALIGN -.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; Alpha, since Linux 2.6.22; -.\" sh: 94ea5e449ae834af058ef005d16a8ad44fcf13d6 -.\" tile: 2f9ac29eec71a696cb0dcc5fb82c0f8d4dac28c9 -sh, since Linux 2.6.34; tile, since Linux 3.12) -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. -Alpha also supports an additional flag with the value -of 4 and no corresponding named constant, -which instructs kernel to not fix up -unaligned accesses (it is analogous to providing the -.B UAC_NOFIX -flag in -.B SSI_NVPAIRS -operation of the -.BR setsysinfo () -system call on Tru64). -.\" prctl PR_GET_UNALIGN -.TP -.B PR_GET_UNALIGN -(See -.B PR_SET_UNALIGN -for information on versions and architectures.) -Return unaligned access control bits, in the location pointed to by -.IR "(unsigned int\~*) arg2" . -.\" prctl PR_GET_AUXV -.TP -.BR PR_GET_AUXV " (since Linux 6.4)" -Get the auxiliary vector (auxv) into the buffer pointed to by -.IR "(void\~*) arg2" , -whose length is given by \fIarg3\fP. -If the buffer is not long enough for the full auxiliary vector, -the copy will be truncated. -Return (as the function result) -the full length of the auxiliary vector. -\fIarg4\fP and \fIarg5\fP must be 0. -.TP -.BR PR_SET_MDWE " (since Linux 6.3)" -.\" commit b507808ebce23561d4ff8c2aa1fb949fe402bc61 -Set the calling process' Memory-Deny-Write-Execute protection mask. -Once protection bits are set, -they can not be changed. -.I arg2 -must be a bit mask of: -.RS -.TP -.B PR_MDWE_REFUSE_EXEC_GAIN -New memory mapping protections can't be writable and executable. -Non-executable mappings can't become executable. -.TP -.B PR_MDWE_NO_INHERIT " (since Linux 6.6)" -.\" commit 2a87e5520554034e8c423479740f95bea4a086a0 -Do not propagate MDWE protection to child processes on -.BR fork (2). -Setting this bit requires setting -.B PR_MDWE_REFUSE_EXEC_GAIN -too. -.RE -.TP -.BR PR_GET_MDWE " (since Linux 6.3)" -.\" commit b507808ebce23561d4ff8c2aa1fb949fe402bc61 -Return (as the function result) the Memory-Deny-Write-Execute protection mask -of the calling process. -(See -.B PR_SET_MDWE -for information on the protection mask bits.) -.SH RETURN VALUE -On success, -.BR PR_CAP_AMBIENT + PR_CAP_AMBIENT_IS_SET , -.BR PR_CAPBSET_READ , -.BR PR_GET_DUMPABLE , -.BR PR_GET_FP_MODE , -.BR PR_GET_IO_FLUSHER , -.BR PR_GET_KEEPCAPS , -.BR PR_MCE_KILL_GET , -.BR PR_GET_NO_NEW_PRIVS , -.BR PR_GET_SECUREBITS , -.BR PR_GET_SPECULATION_CTRL , -.BR PR_SVE_GET_VL , -.BR PR_SVE_SET_VL , -.BR PR_GET_TAGGED_ADDR_CTRL , -.BR PR_GET_THP_DISABLE , -.BR PR_GET_TIMING , -.BR PR_GET_TIMERSLACK , -.BR PR_GET_AUXV , -and (if it returns) -.B PR_GET_SECCOMP -return the nonnegative values described above. -All other -.I op -values return 0 on success. -On error, \-1 is returned, and -.I errno -is set to indicate the error. -.SH ERRORS -.TP -.B EACCES -.I op -is -.B PR_SET_SECCOMP -and -.I arg2 -is -.BR SECCOMP_MODE_FILTER , -but the process does not have the -.B CAP_SYS_ADMIN -capability or has not set the -.I no_new_privs -attribute (see the discussion of -.B PR_SET_NO_NEW_PRIVS -above). -.TP -.B EACCES -.I op -is -.BR PR_SET_MM , -and -.I arg3 -is -.BR PR_SET_MM_EXE_FILE , -the file is not executable. -.TP -.B EBADF -.I op -is -.BR PR_SET_MM , -.I arg3 -is -.BR PR_SET_MM_EXE_FILE , -and the file descriptor passed in -.I arg4 -is not valid. -.TP -.B EBUSY -.I op -is -.BR PR_SET_MM , -.I arg3 -is -.BR PR_SET_MM_EXE_FILE , -and this the second attempt to change the -.IR /proc/ pid /exe -symbolic link, which is prohibited. -.TP -.B EFAULT -.I arg2 -is an invalid address. -.TP -.B EFAULT -.I op -is -.BR PR_SET_SECCOMP , -.I arg2 -is -.BR SECCOMP_MODE_FILTER , -the system was built with -.BR CONFIG_SECCOMP_FILTER , -and -.I arg3 -is an invalid address. -.TP -.B EFAULT -.I op -is -.B PR_SET_SYSCALL_USER_DISPATCH -and -.I arg5 -has an invalid address. -.TP -.B EINVAL -The value of -.I op -is not recognized, -or not supported on this system. -.TP -.B EINVAL -.I op -is -.B PR_MCE_KILL -or -.B PR_MCE_KILL_GET -or -.BR PR_SET_MM , -and unused -.BR prctl () -arguments were not specified as zero. -.TP -.B EINVAL -.I arg2 -is not valid value for this -.IR op . -.TP -.B EINVAL -.I op -is -.B PR_SET_SECCOMP -or -.BR PR_GET_SECCOMP , -and the kernel was not configured with -.BR CONFIG_SECCOMP . -.TP -.B EINVAL -.I op -is -.BR PR_SET_SECCOMP , -.I arg2 -is -.BR SECCOMP_MODE_FILTER , -and the kernel was not configured with -.BR CONFIG_SECCOMP_FILTER . -.TP -.B EINVAL -.I op -is -.BR PR_SET_MM , -and one of the following is true -.RS -.IP \[bu] 3 -.I arg4 -or -.I arg5 -is nonzero; -.IP \[bu] -.I arg3 -is greater than -.B TASK_SIZE -(the limit on the size of the user address space for this architecture); -.IP \[bu] -.I arg2 -is -.BR PR_SET_MM_START_CODE , -.BR PR_SET_MM_END_CODE , -.BR PR_SET_MM_START_DATA , -.BR PR_SET_MM_END_DATA , -or -.BR PR_SET_MM_START_STACK , -and the permissions of the corresponding memory area are not as required; -.IP \[bu] -.I arg2 -is -.B PR_SET_MM_START_BRK -or -.BR PR_SET_MM_BRK , -and -.I arg3 -is less than or equal to the end of the data segment -or specifies a value that would cause the -.B RLIMIT_DATA -resource limit to be exceeded. -.RE -.TP -.B EINVAL -.I op -is -.B PR_SET_PTRACER -and -.I arg2 -is not 0, -.BR PR_SET_PTRACER_ANY , -or the PID of an existing process. -.TP -.B EINVAL -.I op -is -.B PR_SET_PDEATHSIG -and -.I arg2 -is not a valid signal number. -.TP -.B EINVAL -.I op -is -.B PR_SET_DUMPABLE -and -.I arg2 -is neither -.B SUID_DUMP_DISABLE -nor -.BR SUID_DUMP_USER . -.TP -.B EINVAL -.I op -is -.B PR_SET_TIMING -and -.I arg2 -is not -.BR PR_TIMING_STATISTICAL . -.TP -.B EINVAL -.I op -is -.B PR_SET_NO_NEW_PRIVS -and -.I arg2 -is not equal to 1 -or -.IR arg3 , -.IR arg4 , -or -.I arg5 -is nonzero. -.TP -.B EINVAL -.I op -is -.B PR_GET_NO_NEW_PRIVS -and -.IR arg2 , -.IR arg3 , -.IR arg4 , -or -.I arg5 -is nonzero. -.TP -.B EINVAL -.I op -is -.B PR_SET_THP_DISABLE -and -.IR arg3 , -.IR arg4 , -or -.I arg5 -is nonzero. -.TP -.B EINVAL -.I op -is -.B PR_GET_THP_DISABLE -and -.IR arg2 , -.IR arg3 , -.IR arg4 , -or -.I arg5 -is nonzero. -.TP -.B EINVAL -.I op -is -.B PR_CAP_AMBIENT -and an unused argument -.RI ( arg4 , -.IR arg5 , -or, -in the case of -.BR PR_CAP_AMBIENT_CLEAR_ALL , -.IR arg3 ) -is nonzero; or -.I arg2 -has an invalid value; -or -.I arg2 -is -.BR PR_CAP_AMBIENT_LOWER , -.BR PR_CAP_AMBIENT_RAISE , -or -.B PR_CAP_AMBIENT_IS_SET -and -.I arg3 -does not specify a valid capability. -.TP -.B EINVAL -.I op -was -.B PR_GET_SPECULATION_CTRL -or -.B PR_SET_SPECULATION_CTRL -and unused arguments to -.BR prctl () -are not 0. -.TP -.B EINVAL -.I op -is -.B PR_PAC_RESET_KEYS -and the arguments are invalid or unsupported. -See the description of -.B PR_PAC_RESET_KEYS -above for details. -.TP -.B EINVAL -.I op -is -.B PR_SVE_SET_VL -and the arguments are invalid or unsupported, -or SVE is not available on this platform. -See the description of -.B PR_SVE_SET_VL -above for details. -.TP -.B EINVAL -.I op -is -.B PR_SVE_GET_VL -and SVE is not available on this platform. -.TP -.B EINVAL -.I op -is -.B PR_SET_SYSCALL_USER_DISPATCH -and one of the following is true: -.RS -.IP \[bu] 3 -.I arg2 -is -.B PR_SYS_DISPATCH_OFF -and the remaining arguments are not 0; -.IP \[bu] -.I arg2 -is -.B PR_SYS_DISPATCH_ON -and the memory range specified is outside the -address space of the process. -.IP \[bu] -.I arg2 -is invalid. -.RE -.TP -.B EINVAL -.I op -is -.B PR_SET_TAGGED_ADDR_CTRL -and the arguments are invalid or unsupported. -See the description of -.B PR_SET_TAGGED_ADDR_CTRL -above for details. -.TP -.B EINVAL -.I op -is -.B PR_GET_TAGGED_ADDR_CTRL -and the arguments are invalid or unsupported. -See the description of -.B PR_GET_TAGGED_ADDR_CTRL -above for details. -.TP -.B ENODEV -.I op -was -.B PR_SET_SPECULATION_CTRL -the kernel or CPU does not support the requested speculation misfeature. -.TP -.B ENXIO -.I op -was -.B PR_MPX_ENABLE_MANAGEMENT -or -.B PR_MPX_DISABLE_MANAGEMENT -and the kernel or the CPU does not support MPX management. -Check that the kernel and processor have MPX support. -.TP -.B ENXIO -.I op -was -.B PR_SET_SPECULATION_CTRL -implies that the control of the selected speculation misfeature is not possible. -See -.B PR_GET_SPECULATION_CTRL -for the bit fields to determine which option is available. -.TP -.B EOPNOTSUPP -.I op -is -.B PR_SET_FP_MODE -and -.I arg2 -has an invalid or unsupported value. -.TP -.B EPERM -.I op -is -.BR PR_SET_SECUREBITS , -and the caller does not have the -.B CAP_SETPCAP -capability, -or tried to unset a "locked" flag, -or tried to set a flag whose corresponding locked flag was set -(see -.BR capabilities (7)). -.TP -.B EPERM -.I op -is -.B PR_SET_SPECULATION_CTRL -wherein the speculation was disabled with -.B PR_SPEC_FORCE_DISABLE -and caller tried to enable it again. -.TP -.B EPERM -.I op -is -.BR PR_SET_KEEPCAPS , -and the caller's -.B SECBIT_KEEP_CAPS_LOCKED -flag is set -(see -.BR capabilities (7)). -.TP -.B EPERM -.I op -is -.BR PR_CAPBSET_DROP , -and the caller does not have the -.B CAP_SETPCAP -capability. -.TP -.B EPERM -.I op -is -.BR PR_SET_MM , -and the caller does not have the -.B CAP_SYS_RESOURCE -capability. -.TP -.B EPERM -.I op -is -.B PR_CAP_AMBIENT -and -.I arg2 -is -.BR PR_CAP_AMBIENT_RAISE , -but either the capability specified in -.I arg3 -is not present in the process's permitted and inheritable capability sets, -or the -.B PR_CAP_AMBIENT_LOWER -securebit has been set. -.TP -.B ERANGE -.I op -was -.B PR_SET_SPECULATION_CTRL -and -.I arg3 -is not -.BR PR_SPEC_ENABLE , -.BR PR_SPEC_DISABLE , -.BR PR_SPEC_FORCE_DISABLE , -nor -.BR PR_SPEC_DISABLE_NOEXEC . -.SH VERSIONS -IRIX has a -.BR prctl () -system call (also introduced in Linux 2.1.44 -as irix_prctl on the MIPS architecture), -with prototype -.P -.in +4n -.EX -.BI "ptrdiff_t prctl(int " op ", int " arg2 ", int " arg3 ); -.EE -.in -.P -and operations 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, and so on. -.SH STANDARDS -Linux. -.SH HISTORY -Linux 2.1.57, -glibc 2.0.6 -.SH SEE ALSO -.BR signal (2), -.BR core (5) |