| From 5a049f14902982c26538250bdc8d54156d357252 Mon Sep 17 00:00:00 2001 |
| From: Anton Blanchard <anton@samba.org> |
| Date: Mon, 18 Nov 2013 14:55:28 +1100 |
| Subject: powerpc: ppc64 address space capped at 32TB, mmap randomisation disabled |
| |
| From: Anton Blanchard <anton@samba.org> |
| |
| commit 5a049f14902982c26538250bdc8d54156d357252 upstream. |
| |
| Commit fba2369e6ceb (mm: use vm_unmapped_area() on powerpc architecture) |
| has a bug in slice_scan_available() where we compare an unsigned long |
| (high_slices) against a shifted int. As a result, comparisons against |
| the top 32 bits of high_slices (representing the top 32TB) always |
| returns 0 and the top of our mmap region is clamped at 32TB |
| |
| This also breaks mmap randomisation since the randomised address is |
| always up near the top of the address space and it gets clamped down |
| to 32TB. |
| |
| Signed-off-by: Anton Blanchard <anton@samba.org> |
| Acked-by: Michel Lespinasse <walken@google.com> |
| Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/powerpc/mm/slice.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/arch/powerpc/mm/slice.c |
| +++ b/arch/powerpc/mm/slice.c |
| @@ -258,7 +258,7 @@ static bool slice_scan_available(unsigne |
| slice = GET_HIGH_SLICE_INDEX(addr); |
| *boundary_addr = (slice + end) ? |
| ((slice + end) << SLICE_HIGH_SHIFT) : SLICE_LOW_TOP; |
| - return !!(available.high_slices & (1u << slice)); |
| + return !!(available.high_slices & (1ul << slice)); |
| } |
| } |
| |