aboutsummaryrefslogtreecommitdiffstats
path: root/man2
diff options
context:
space:
mode:
authorDave Hansen <dave.hansen@intel.com>2016-09-13 12:45:09 -0700
committerMichael Kerrisk <mtk.manpages@gmail.com>2016-10-17 12:51:10 +0200
commitd800ae65d33ec49a8712e4366af1588a08db38c2 (patch)
tree1fb2686af93f83322eb51911a4e12d6a3a541556 /man2
parent452f54946f29b5fed89ad17875794b0668234a8b (diff)
downloadman-pages-d800ae65d33ec49a8712e4366af1588a08db38c2.tar.gz
mprotect.2: Document pkey_mprotect() system call
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Diffstat (limited to 'man2')
-rw-r--r--man2/mprotect.244
1 files changed, 41 insertions, 3 deletions
diff --git a/man2/mprotect.2 b/man2/mprotect.2
index 8b124c07b9..16457cb59a 100644
--- a/man2/mprotect.2
+++ b/man2/mprotect.2
@@ -38,16 +38,19 @@
.\"
.TH MPROTECT 2 2015-07-23 "Linux" "Linux Programmer's Manual"
.SH NAME
-mprotect \- set protection on a region of memory
+mprotect, pkey_mprotect \- set protection on a region of memory
.SH SYNOPSIS
.nf
.B #include <sys/mman.h>
.sp
.BI "int mprotect(void *" addr ", size_t " len ", int " prot );
+.BI "int pkey_mprotect(void *" addr ", size_t " len ", int " prot ", int " pkey ");
.fi
.SH DESCRIPTION
.BR mprotect ()
-changes protection for the calling process's memory page(s)
+and
+.BR pkey_mprotect ()
+change protection for the calling process's memory page(s)
containing any part of the address range in the
interval [\fIaddr\fP,\ \fIaddr\fP+\fIlen\fP\-1].
.I addr
@@ -74,10 +77,19 @@ The memory can be modified.
.TP
.B PROT_EXEC
The memory can be executed.
+.PP
+.I pkey
+is the protection key to assign to the memory.
+A pkey must be allocated with
+.BR pkey_alloc (2)
+before it is passed to
+.BR pkey_mprotect ().
.SH RETURN VALUE
On success,
.BR mprotect ()
-returns zero.
+and
+.BR pkey_mprotect ()
+return zero.
On error, \-1 is returned, and
.I errno
is set appropriately.
@@ -95,6 +107,8 @@ to mark it
.B EINVAL
\fIaddr\fP is not a valid pointer,
or not a multiple of the system page size.
+Or: \fIpkey\fP has not been allocated with
+.BR pkey_alloc (2)
.\" Or: both PROT_GROWSUP and PROT_GROWSDOWN were specified in 'prot'.
.TP
.B ENOMEM
@@ -165,6 +179,29 @@ but at a minimum can allow write access only if
has been set, and must not allow any access if
.B PROT_NONE
has been set.
+
+Applications should be careful when mixing use of
+.BR mprotect ()
+and
+.BR pkey_mprotect () .
+On x86, when
+.BR mprotect ()
+is used with
+.IR prot
+set to
+.B PROT_EXEC
+a pkey is may be allocated and set on the memory implicitly
+by the kernel, but only when the pkey was 0 previously.
+
+On systems that do not support protection keys in hardware,
+.BR pkey_mprotect ()
+may still be used, but
+.IR pkey
+must be set to 0.
+When called this way, the operation of
+.BR pkey_mprotect ()
+is equivalent to
+.BR mprotect ().
.SH EXAMPLE
.\" sigaction.2 refers to this example
.PP
@@ -246,3 +283,4 @@ main(int argc, char *argv[])
.SH SEE ALSO
.BR mmap (2),
.BR sysconf (3)
+.BR pkey (7)