mirror of https://github.com/mkerrisk/man-pages
mmap.2: MAP_FIXED is okay if the address range has been reserved
Clarify that MAP_FIXED is appropriate if the specified address range has been reserved using an existing mapping, but shouldn't be used otherwise. Signed-off-by: Jann Horn <jannh@google.com> Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
This commit is contained in:
parent
5bc2d858e1
commit
da6ad3cd89
19
man2/mmap.2
19
man2/mmap.2
|
@ -253,8 +253,9 @@ Software that aspires to be portable should use this option with care,
|
|||
keeping in mind that the exact layout of a process's memory mappings
|
||||
is allowed to change significantly between kernel versions,
|
||||
C library versions, and operating system releases.
|
||||
Furthermore, this option is extremely hazardous (when used on its own),
|
||||
because it forcibly removes preexisting mappings,
|
||||
This option should only be used when the specified memory region has
|
||||
already been reserved using another mapping; otherwise, it is extremely
|
||||
hazardous because it forcibly removes preexisting mappings,
|
||||
making it easy for a multithreaded process to corrupt its own address space.
|
||||
.IP
|
||||
For example, suppose that thread A looks through
|
||||
|
@ -284,13 +285,15 @@ and the PAM libraries
|
|||
.UR http://www.linux-pam.org
|
||||
.UE .
|
||||
.IP
|
||||
Newer kernels
|
||||
(Linux 4.17 and later) have a
|
||||
For cases in which the specified memory region has not been reserved using an
|
||||
existing mapping, newer kernels (Linux 4.17 and later) provide an option
|
||||
.B MAP_FIXED_NOREPLACE
|
||||
option that avoids the corruption problem; if available,
|
||||
.B MAP_FIXED_NOREPLACE
|
||||
should be preferred over
|
||||
.BR MAP_FIXED .
|
||||
that should be used instead; older kernels require the caller to use
|
||||
.I addr
|
||||
as a hint (without
|
||||
.BR MAP_FIXED )
|
||||
and take appropriate action if the kernel places the new mapping at a
|
||||
different address.
|
||||
.TP
|
||||
.BR MAP_FIXED_NOREPLACE " (since Linux 4.17)"
|
||||
.\" commit a4ff8e8620d3f4f50ac4b41e8067b7d395056843
|
||||
|
|
Loading…
Reference in New Issue