[LTP] [PATCH v6] Add a test case for mmap MAP_GROWSDOWN flag

Cyril Hrubis chrubis@suse.cz
Mon Sep 21 11:47:14 CEST 2020


Hi!
> > + *   address.
> > + *
> > + *   Kernel default 'stack_guard_gap' size is '256 * getpagesize()'.
> > + *
> > + *   The stack memory map would look like:
> > + *
> > + *   |  -  -  -   reserved  size   -  -  -  |
> > + *
> > + *   +-- - - - --+------------+-------------+
> > + *   | 256 pages |  unmapped  |   mapped    |
> > + *   +-- - - - --+------------+-------------+
> > + *                            | mapped size |
> > + *   ^           |  -  -  stack size  -  -  |
> > + *   start
> > + *               ^                          ^
> > + *               stack bottom       stack top
> > + *

...

> > +static void *allocate_stack(size_t stack_size, size_t mapped_size)
> > +{
> > +       void *start, *stack_top, *stack_bottom;
> > +
> > +       long reserved_size = 256 * page_size + stack_size;
> > +
> > +       start = SAFE_MMAP(NULL, reserved_size, PROT_READ | PROT_WRITE,
> > +                         MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
> > +       SAFE_MUNMAP(start, reserved_size);
> > +
> > +       SAFE_MMAP((start + reserved_size - mapped_size), mapped_size,
> > PROT_READ | PROT_WRITE,
> > +                 MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS | MAP_GROWSDOWN,
> > +                 -1, 0);
> > +
> > +       stack_top = start + reserved_size;
> > +       stack_bottom = start + reserved_size - stack_size;
> >
> 
> As the stack grows down, shouldn't grow from stack_bottom to stack_top?
> which
> means stack_bottom = start + reserved_size.

That depends on the definition of top and bottom. For me it makes sense
that the the stack grows from top to the bottom because it grows down,
which is consistent with the MAP_GROWSDOWN flag.

Also this is really the reason why I added the ASCII art to the top
level comment of the test in order to make clear how these terms are
used in the code.

-- 
Cyril Hrubis
chrubis@suse.cz


More information about the ltp mailing list