From 3e906035cc7295812516c3d5de516786cd839e68 Mon Sep 17 00:00:00 2001 From: Anton Blanchard Date: Sun, 22 Feb 2009 01:50:01 +0000 Subject: [PATCH] --- yaml --- r: 138491 b: refs/heads/master c: 9f14c42d7582bf33bbe1e133d897a6942ceae08e h: refs/heads/master i: 138489: 3f7ff8daeb07c08ab5f8deded05e5c650ce8210d 138487: 4d127648ea01e2ef2e6070661b89fb8389d27f17 v: v3 --- [refs] | 2 +- trunk/arch/powerpc/mm/mmap.c | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 719c4fcb3872..76d6009129c2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 13a2cb3694d7237e6cc3e94fcb311b81908ccd06 +refs/heads/master: 9f14c42d7582bf33bbe1e133d897a6942ceae08e diff --git a/trunk/arch/powerpc/mm/mmap.c b/trunk/arch/powerpc/mm/mmap.c index 8ff5757af0d7..f7376dbb653b 100644 --- a/trunk/arch/powerpc/mm/mmap.c +++ b/trunk/arch/powerpc/mm/mmap.c @@ -24,6 +24,7 @@ #include #include +#include #include /* @@ -45,6 +46,20 @@ static inline int mmap_is_legacy(void) return sysctl_legacy_va_layout; } +static unsigned long mmap_rnd(void) +{ + unsigned long rnd = 0; + + if (current->flags & PF_RANDOMIZE) { + /* 8MB for 32bit, 1GB for 64bit */ + if (is_32bit_task()) + rnd = (long)(get_random_int() % (1<<(23-PAGE_SHIFT))); + else + rnd = (long)(get_random_int() % (1<<(30-PAGE_SHIFT))); + } + return rnd << PAGE_SHIFT; +} + static inline unsigned long mmap_base(void) { unsigned long gap = current->signal->rlim[RLIMIT_STACK].rlim_cur; @@ -54,7 +69,7 @@ static inline unsigned long mmap_base(void) else if (gap > MAX_GAP) gap = MAX_GAP; - return TASK_SIZE - (gap & PAGE_MASK); + return PAGE_ALIGN(TASK_SIZE - gap - mmap_rnd()); } /*