mprotect.2: Document PROT_SEM, PROT_SAO, PROT_GROWSUP, and PROT_GROWSDOWN

This commit is contained in:
Eugene Syromyatnikov 2016-11-20 04:16:03 +03:00 committed by Michael Kerrisk
parent 50efeef8ca
commit a9799e8a86
1 changed files with 55 additions and 8 deletions

View File

@ -30,12 +30,6 @@
.\" 2007-06-02, mtk: Fairly substantial rewrites and additions, and
.\" a much improved example program.
.\"
.\" FIXME The following protection flags need documenting:
.\" PROT_SEM
.\" PROT_GROWSDOWN
.\" PROT_GROWSUP
.\" PROT_SAO (PowerPC)
.\"
.TH MPROTECT 2 2015-07-23 "Linux" "Linux Programmer's Manual"
.SH NAME
mprotect, pkey_mprotect \- set protection on a region of memory
@ -60,7 +54,7 @@ that violates the protection, then the kernel generates a
signal for the process.
.PP
.I prot
is either
is a combination of the following access flags:
.B PROT_NONE
or a bitwise-or of the other values in the following list:
.TP 1.1i
@ -75,6 +69,40 @@ The memory can be modified.
.TP
.B PROT_EXEC
The memory can be executed.
.TP
.BR PROT_SEM " (since Linux 2.5.7)"
The memory can be used for atomic operations. It was introduced as part of
.BR futex (2)
implementation (in order to guarantee ability to perform atomic
operations required by its commands such as
.BR FUTEX_WAIT ),
but not actually used in any currently supported architecture so far.
.\" aba46c5027cb59d98052231b36efcbbde9c77a1d ef3d3246a0d06be622867d21af25f997aeeb105f
.TP
.BR PROT_SAO " (since Linux 2.6.26)"
The memory should have strong access ordering. This feature is specific to
PowerPC architecture (version 2.06 of architecture specification adds SAO CPU
feature, and it is available on POWER 7 or PowerPC A2, for example).
.PP
Additionally (since Linux 2.6.0),
.I prot
can have one of the following flags set:
.TP 1.1i
.\" mm/mmap.c:
.\" vm_flags |= calc_vm_prot_bits(prot, pkey) | calc_vm_flag_bits(flags) |
.\" mm->def_flags | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC;
.\" And calc_vm_flag_bits converts only GROWSDOWN/DENYWRITE/LOCKED.
.B PROT_GROWSUP
Apply protection mode up to the end of the mapping which grows up (it should be a
stack segment on HP PA-RISC, since there are no other ways to map a segment with
.B VM_GROWSUP
even if architecture has support for it.)
.TP
.B PROT_GROWSDOWN
Apply protection mode down to the beginning of the mapping which grows down (it
should be stack segment or mapped with
.B MAP_GROWSDOWN
flag set.)
.PP
Like
.BR mprotect (),
@ -122,7 +150,26 @@ or not a multiple of the system page size.
.RB ( pkey_mprotect ())
\fIpkey\fP has not been allocated with
.BR pkey_alloc (2)
.\" Or: both PROT_GROWSUP and PROT_GROWSDOWN were specified in 'prot'.
.TP
.BR EINVAL
Both
.BR PROT_GROWSUP " and " PROT_GROWSDOWN
were specified in
.IR prot .
.TP
.BR EINVAL
Invalid (other than
.BR PROT_READ ", " PROT_WRITE ", " PROT_EXEC ", " PROT_SEM ", "
.BR PROT_SAO " (on PowerPC only), " PROT_GROWSUP ", " PROT_GROWSDOWN )
flags specified in
.IR prot .
.TP
.BR EINVAL
(PowerPC architecture)
.B PROT_SAO
specified in
.IR prot ,
but SAO hardware feature is not available.
.TP
.B ENOMEM
Internal kernel structures could not be allocated.