From d2731d77eac37510db9024caa6519caddbfd1808 Mon Sep 17 00:00:00 2001 From: Heiko Carstens Date: Wed, 12 Jan 2011 09:55:30 +0100 Subject: [PATCH] --- yaml --- r: 230973 b: refs/heads/master c: 3351918282fd664e918a3175ddfae9b15656122e h: refs/heads/master i: 230971: a9510b6067aee6e346a8613f33f78f3b65559d63 v: v3 --- [refs] | 2 +- trunk/arch/s390/include/asm/elf.h | 3 +++ trunk/arch/s390/kernel/process.c | 18 ++++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 130285e7a00a..7cff00bce6fe 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a05c90f1948baacedd0c3e7e3250225be4cae727 +refs/heads/master: 3351918282fd664e918a3175ddfae9b15656122e diff --git a/trunk/arch/s390/include/asm/elf.h b/trunk/arch/s390/include/asm/elf.h index 9dbd3e7a3bc3..457fb7c16236 100644 --- a/trunk/arch/s390/include/asm/elf.h +++ b/trunk/arch/s390/include/asm/elf.h @@ -220,4 +220,7 @@ struct linux_binprm; #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1 int arch_setup_additional_pages(struct linux_binprm *, int); +extern unsigned long arch_randomize_brk(struct mm_struct *mm); +#define arch_randomize_brk arch_randomize_brk + #endif diff --git a/trunk/arch/s390/kernel/process.c b/trunk/arch/s390/kernel/process.c index 38ff69e562c8..26d48fe72999 100644 --- a/trunk/arch/s390/kernel/process.c +++ b/trunk/arch/s390/kernel/process.c @@ -341,3 +341,21 @@ unsigned long arch_align_stack(unsigned long sp) sp -= get_random_int() & ~PAGE_MASK; return sp & ~0xf; } + +static inline unsigned long brk_rnd(void) +{ + /* 8MB for 32bit, 1GB for 64bit */ + if (is_32bit_task()) + return (get_random_int() & 0x7ffUL) << PAGE_SHIFT; + else + return (get_random_int() & 0x3ffffUL) << PAGE_SHIFT; +} + +unsigned long arch_randomize_brk(struct mm_struct *mm) +{ + unsigned long ret = PAGE_ALIGN(mm->brk + brk_rnd()); + + if (ret < mm->brk) + return mm->brk; + return ret; +}