Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

powerpc+sparc64/mm: Remove hack in mmap randomize layout

Since commit 8a0a9bd4db63bc45e301, this comment in mmap_rnd() does not
hold true as the value returned by get_random_int() will in fact be

different every single call. Remove the comment and simplify the code
back to its original desired form.

This reverts commit a5adc91a4b44b5d1 which is no longer necessary and
also fixes the sparc code that copied this same adjustment.

Signed-off-by: Dan McGee <dpmcgee@gmail.com>
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>

authored by

Dan McGee and committed by
Benjamin Herrenschmidt
fa8cbaaf 3ce21cdf

+6 -14
+3 -11
arch/powerpc/mm/mmap_64.c
··· 53 53 return sysctl_legacy_va_layout; 54 54 } 55 55 56 - /* 57 - * Since get_random_int() returns the same value within a 1 jiffy window, 58 - * we will almost always get the same randomisation for the stack and mmap 59 - * region. This will mean the relative distance between stack and mmap will 60 - * be the same. 61 - * 62 - * To avoid this we can shift the randomness by 1 bit. 63 - */ 64 56 static unsigned long mmap_rnd(void) 65 57 { 66 58 unsigned long rnd = 0; ··· 60 68 if (current->flags & PF_RANDOMIZE) { 61 69 /* 8MB for 32bit, 1GB for 64bit */ 62 70 if (is_32bit_task()) 63 - rnd = (long)(get_random_int() % (1<<(22-PAGE_SHIFT))); 71 + rnd = (long)(get_random_int() % (1<<(23-PAGE_SHIFT))); 64 72 else 65 - rnd = (long)(get_random_int() % (1<<(29-PAGE_SHIFT))); 73 + rnd = (long)(get_random_int() % (1<<(30-PAGE_SHIFT))); 66 74 } 67 - return (rnd << PAGE_SHIFT) * 2; 75 + return rnd << PAGE_SHIFT; 68 76 } 69 77 70 78 static inline unsigned long mmap_base(void)
+3 -3
arch/sparc/kernel/sys_sparc_64.c
··· 368 368 if (current->flags & PF_RANDOMIZE) { 369 369 unsigned long val = get_random_int(); 370 370 if (test_thread_flag(TIF_32BIT)) 371 - rnd = (val % (1UL << (22UL-PAGE_SHIFT))); 371 + rnd = (val % (1UL << (23UL-PAGE_SHIFT))); 372 372 else 373 - rnd = (val % (1UL << (29UL-PAGE_SHIFT))); 373 + rnd = (val % (1UL << (30UL-PAGE_SHIFT))); 374 374 } 375 - return (rnd << PAGE_SHIFT) * 2; 375 + return rnd << PAGE_SHIFT; 376 376 } 377 377 378 378 void arch_pick_mmap_layout(struct mm_struct *mm)