Hi Ben, On 2026-03-18T10:49:37-0400, Ben Kallus wrote: > The man page states that the MAP_GROWSDOWN flag causes the kernel to return an > address one page lower than the mapping created. This is not true; the kernel > returns the base address of the mapping created, just as it does when > MAP_GROWSDOWN is not passed. This can be confirmed by inspecting > /proc/self/maps after making a gd mapping, and comparing it to the returned > value from mmap. > > You can confirm this by running this example program: > > int main(void) { > printf("mmap return value: %p\n", > mmap(nullptr, 1 /* rounds up to page */, PROT_READ | PROT_WRITE, > MAP_ANONYMOUS | MAP_PRIVATE | MAP_GROWSDOWN, -1, 0)); > FILE *const f = fopen("/proc/self/maps", "r"); > while (1) { > int const c = fgetc(f); > if (c < 0) { > break; > } > putchar(c); > } > } > > ...and observing that the value returned from mmap is the base of a > mapping in /proc/self/maps. > > Fixes: 176b1a76 (2016-11-21; "mmap.2: Add (much) more detail on MAP_GROWSDOWN") > Signed-off-by: Ben Kallus Thanks! I've applied the patch. Have a lovely night! Alex > --- > man/man2/mmap.2 | 2 -- > 1 file changed, 2 deletions(-) > > diff --git a/man/man2/mmap.2 b/man/man2/mmap.2 > index 09e7933d3..20b94c243 100644 > --- a/man/man2/mmap.2 > +++ b/man/man2/mmap.2 > @@ -276,8 +276,6 @@ should check the returned address against the requested address. > This flag is used for stacks. > It indicates to the kernel virtual memory system that the mapping > should extend downward in memory. > -The return address is one page lower than the memory area that is > -actually created in the process's virtual address space. > Touching an address in the "guard" page below the mapping will cause > the mapping to grow by a page. > This growth can be repeated until the mapping grows to within a > -- > 2.53.0 > > --