aboutsummaryrefslogtreecommitdiffstats
path: root/man/man2
diff options
context:
space:
mode:
authorAlejandro Colomar <alx@kernel.org>2024-05-28 18:25:15 +0200
committerAlejandro Colomar <alx@kernel.org>2024-05-31 01:40:54 +0200
commit562986af96d3d1129dcc4c2098c9953465ca1e58 (patch)
tree073349f16c0a5acecb38442e3f604ef83f1ae02b /man/man2
parent98b33232a94539ae5c8594932a3cfce641ca7abc (diff)
downloadman-pages-562986af96d3d1129dcc4c2098c9953465ca1e58.tar.gz
prctl.2, PR_SET_MM.2const: Split PR_SET_MM from prctl(2)
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Diffstat (limited to 'man/man2')
-rw-r--r--man/man2/prctl.2257
1 files changed, 3 insertions, 254 deletions
diff --git a/man/man2/prctl.2 b/man/man2/prctl.2
index 9222d2ce92..087a29ca3e 100644
--- a/man/man2/prctl.2
+++ b/man/man2/prctl.2
@@ -18,7 +18,6 @@
.\" 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
-.\" 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
@@ -99,184 +98,8 @@ The first argument can be:
.B PR_MCE_KILL
.TQ
.B PR_MCE_KILL_GET
-.\" 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 arg3
-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
+.TQ
+.B PR_SET_MM
.\" prctl PR_SET_VMA
.TP
.BR PR_SET_VMA " (since Linux 5.17)"
@@ -1619,38 +1442,6 @@ attribute (see the discussion of
.B PR_SET_NO_NEW_PRIVS
above).
.TP
-.B EACCES
-.I op
-is
-.BR PR_SET_MM ,
-and
-.I arg2
-is
-.BR PR_SET_MM_EXE_FILE ,
-the file is not executable.
-.TP
-.B EBADF
-.I op
-is
-.BR PR_SET_MM ,
-.I arg2
-is
-.BR PR_SET_MM_EXE_FILE ,
-and the file descriptor passed in
-.I arg3
-is not valid.
-.TP
-.B EBUSY
-.I op
-is
-.BR PR_SET_MM ,
-.I arg2
-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.
@@ -1712,41 +1503,6 @@ and the kernel was not configured with
.B EINVAL
.I op
is
-.BR PR_SET_MM ,
-and one of the following is true
-.RS
-.IP \[bu] 3
-.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
@@ -1883,14 +1639,6 @@ 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_MM ,
-and the caller does not have the
-.B CAP_SYS_RESOURCE
-capability.
-.TP
.B ERANGE
.I op
was
@@ -1948,4 +1696,5 @@ glibc 2.0.6
.BR PR_GET_KEEPCAPS (2const),
.BR PR_MCE_KILL (2const),
.BR PR_MCE_KILL_GET (2const),
+.BR PR_SET_MM (2const),
.BR core (5)