Skip to content

Commit

Permalink
[S390] mmap: consider stack address randomization
Browse files Browse the repository at this point in the history
Consider stack address randomization when calulating mmap_base for
flexible mmap layout . Because of address randomization the stack
address can be up to 8MB lower than STACK_TOP.
When calculating mmap_base this isn't taken into account, which could
lead to the case that the gap between the real stack top and mmap_base
is lower than what ulimit specifies for the maximum stack size.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
  • Loading branch information
Heiko Carstens authored and Martin Schwidefsky committed Jan 12, 2011
1 parent 7a63fa1 commit 9046e40
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 1 deletion.
2 changes: 2 additions & 0 deletions arch/s390/include/asm/elf.h
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,8 @@ do { \
current->mm->context.noexec == 0; \
})

#define STACK_RND_MASK 0x7ffUL

#define ARCH_DLINFO \
do { \
if (vdso_enabled) \
Expand Down
11 changes: 10 additions & 1 deletion arch/s390/mm/mmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,15 @@
#include <asm/pgalloc.h>
#include <asm/compat.h>

static unsigned long stack_maxrandom_size(void)
{
if (!(current->flags & PF_RANDOMIZE))
return 0;
if (current->personality & ADDR_NO_RANDOMIZE)
return 0;
return STACK_RND_MASK << PAGE_SHIFT;
}

/*
* Top of mmap area (just below the process stack).
*
Expand All @@ -47,7 +56,7 @@ static inline unsigned long mmap_base(void)
else if (gap > MAX_GAP)
gap = MAX_GAP;

return STACK_TOP - (gap & PAGE_MASK);
return STACK_TOP - stack_maxrandom_size() - (gap & PAGE_MASK);
}

static inline int mmap_is_legacy(void)
Expand Down

0 comments on commit 9046e40

Please sign in to comment.