diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2011-01-12 08:55:30 (GMT) |
---|---|---|
committer | Martin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com> | 2011-01-12 08:55:25 (GMT) |
commit | 3351918282fd664e918a3175ddfae9b15656122e (patch) | |
tree | fcfcf8d8ab1ad7380d802276e0dc4a0026b70d84 /arch/s390/kernel | |
parent | a05c90f1948baacedd0c3e7e3250225be4cae727 (diff) | |
download | linux-3351918282fd664e918a3175ddfae9b15656122e.tar.xz |
[S390] Randomise the brk region
Randomize heap address like other architectures do already.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/kernel')
-rw-r--r-- | arch/s390/kernel/process.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c index 38ff69e..26d48fe 100644 --- a/arch/s390/kernel/process.c +++ b/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; +} |