mmap.2: Document new MAP_FIXED_NOREPLACE flag

4.17+ kernels offer a new MAP_FIXED_NOREPLACE flag which allows
the caller to atomically probe for a given address range.

[wording heavily updated by John Hubbard]

Cowritten-by: John Hubbard <jhubbard@nvidia.com>
Signed-off-by: Michal Hocko <mhocko@suse.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
This commit is contained in:
Michal Hocko 2018-04-11 14:04:52 +02:00 committed by Michael Kerrisk
parent 04c8a02088
commit c6a51c0645
1 changed files with 27 additions and 0 deletions

View File

@ -261,6 +261,27 @@ Examples include
and the PAM libraries
.UR http://www.linux-pam.org
.UE .
Newer kernels
(Linux 4.17 and later) have a
.B MAP_FIXED_NOREPLACE
option that avoids the corruption problem; if available, MAP_FIXED_NOREPLACE
should be preferred over MAP_FIXED.
.TP
.BR MAP_FIXED_NOREPLACE " (since Linux 4.17)"
Similar to MAP_FIXED with respect to the
.I
addr
enforcement, but different in that MAP_FIXED_NOREPLACE never clobbers a pre-existing
mapped range. If the requested range would collide with an existing
mapping, then this call fails with
.B EEXIST.
This flag can therefore be used as a way to atomically (with respect to other
threads) attempt to map an address range: one thread will succeed; all others
will report failure. Please note that older kernels which do not recognize this
flag will typically (upon detecting a collision with a pre-existing mapping)
fall back to a "non-MAP_FIXED" type of behavior: they will return an address that
is different than the requested one. Therefore, backward-compatible software
should check the returned address against the requested address.
.TP
.B MAP_GROWSDOWN
This flag is used for stacks.
@ -487,6 +508,12 @@ is not a valid file descriptor (and
.B MAP_ANONYMOUS
was not set).
.TP
.B EEXIST
range covered by
.IR addr ,
.IR length
is clashing with an existing mapping.
.TP
.B EINVAL
We don't like
.IR addr ,