Skip to content
Snippets Groups Projects
Commit 7aba842f authored by Heiko Carstens's avatar Heiko Carstens Committed by Linus Torvalds
Browse files

s390/mmap: randomize mmap base for bottom up direction


Implement mmap base randomization for the bottom up direction, so ASLR
works for both mmap layouts on s390.  See also commit df54d6fa ("x86
get_unmapped_area(): use proper mmap base for bottom-up direction").

Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Cc: Radu Caragea <sinaelgl@gmail.com>
Cc: Michel Lespinasse <walken@google.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Chris Metcalf <cmetcalf@tilera.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 4e99b021
No related branches found
No related tags found
No related merge requests found
...@@ -64,6 +64,11 @@ static unsigned long mmap_rnd(void) ...@@ -64,6 +64,11 @@ static unsigned long mmap_rnd(void)
return (get_random_int() & 0x7ffUL) << PAGE_SHIFT; return (get_random_int() & 0x7ffUL) << PAGE_SHIFT;
} }
static unsigned long mmap_base_legacy(void)
{
return TASK_UNMAPPED_BASE + mmap_rnd();
}
static inline unsigned long mmap_base(void) static inline unsigned long mmap_base(void)
{ {
unsigned long gap = rlimit(RLIMIT_STACK); unsigned long gap = rlimit(RLIMIT_STACK);
...@@ -89,7 +94,7 @@ void arch_pick_mmap_layout(struct mm_struct *mm) ...@@ -89,7 +94,7 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
* bit is set, or if the expected stack growth is unlimited: * bit is set, or if the expected stack growth is unlimited:
*/ */
if (mmap_is_legacy()) { if (mmap_is_legacy()) {
mm->mmap_base = TASK_UNMAPPED_BASE; mm->mmap_base = mmap_base_legacy();
mm->get_unmapped_area = arch_get_unmapped_area; mm->get_unmapped_area = arch_get_unmapped_area;
} else { } else {
mm->mmap_base = mmap_base(); mm->mmap_base = mmap_base();
...@@ -164,7 +169,7 @@ void arch_pick_mmap_layout(struct mm_struct *mm) ...@@ -164,7 +169,7 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
* bit is set, or if the expected stack growth is unlimited: * bit is set, or if the expected stack growth is unlimited:
*/ */
if (mmap_is_legacy()) { if (mmap_is_legacy()) {
mm->mmap_base = TASK_UNMAPPED_BASE; mm->mmap_base = mmap_base_legacy();
mm->get_unmapped_area = s390_get_unmapped_area; mm->get_unmapped_area = s390_get_unmapped_area;
} else { } else {
mm->mmap_base = mmap_base(); mm->mmap_base = mmap_base();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment