On Sat, 14 May 2022, Theo de Raadt wrote:
> I worry a little about having libc use an undocumented mmap(2) flag.
> About as much as using mquery, which is non-standard.
> 
> Maybe __MAP_NOREPLACE should get documentation?  __MAP_NOFAULT is in the
> same situation.  The behaviour of these flags should be documented
> (set in stone), which may also discourage accidental behaviour changes
> by kernel developers in the future?

To throw some spaghetti at the wall...

Index: sys/mmap.2
===================================================================
RCS file: /data/src/openbsd/src/lib/libc/sys/mmap.2,v
retrieving revision 1.68
diff -u -p -r1.68 mmap.2
--- sys/mmap.2  31 Mar 2022 17:27:16 -0000      1.68
+++ sys/mmap.2  14 May 2022 19:06:00 -0000
@@ -58,8 +58,19 @@ The
 argument describes the address where the system should place the mapping.
 If the
 .Dv MAP_FIXED
-flag is specified, the allocation will happen at the specified address,
+flag is specified and the
+.Dv __MAP_NOREPLACE
+flag is not specified,
+the allocation will happen at the specified address,
 replacing any previously established mappings in its range.
+If both the
+.Dv MAP_FIXED
+and
+.Dv __MAP_NOREPLACE
+flags are specified,
+the allocation will happen at the specified address,
+failing with no effect if any previously established mappings are
+in its range.
 Otherwise, the mapping will be placed at the available spot at
 .Fa addr ;
 failing that it will be placed "close by".
@@ -153,6 +164,17 @@ mappings)
 must be multiples of the page size.
 Existing mappings in the address range will be replaced.
 Use of this option is discouraged.
+.It Dv __MAP_NOFAULT
+Indicate that access to pages that are not backed by the mapped
+file or device will be replaced by zero-filled anonymous pages.
+This flag must not be used with an anonymous mapping.
+.It Dv __MAP_NOREPLACE
+Indicates that a
+.Dv MAP_FIXED
+mapping should fail if it would require replacing any existing
+mappings.
+This flag must be used in combination with
+.Dv MAP_FIXED .
 .It Dv MAP_STACK
 Indicate that the mapping is used as a stack.
 This flag must be used in combination with
@@ -278,6 +300,12 @@ device does not support memory mapping.
 The allocation
 .Fa len
 was 0.
+.It Bq Er EINVAL
+.Dv __MAP_NOFAULT
+was specified for an anonymous mapping or
+.Dv __MAP_NOREPLACE
+was specified without
+.Dv MAP_FIXED .
 .It Bq Er ENOMEM
 .Dv MAP_FIXED
 was specified and the
@@ -323,6 +351,14 @@ A fully functional
 system call first appeared in SunOS 4.0
 and has been available since
 .Bx 4.3 Net/2 .
+The
+.Dv __MAP_NOFAULT
+flag appeared in
+.Ox 5.7 .
+The
+.Dv __MAP_NOREPLACE
+flag appeared in
+.Ox 5.3 .
 .Sh CAVEATS
 .St -p1003.1-2008
 specifies that references to pages beyond the end of a mapped object

Reply via email to