On Mon, 30 Nov 2015 15:54:12 -0800 Andrew Morton [off-list ref] wrote:
On Thu, 26 Nov 2015 14:59:42 -0800 Daniel Cashman [off-list ref] wrote:
quoted
ASLR only uses as few as 8 bits to generate the random offset for the
mmap base address on 32 bit architectures. This value was chosen to
prevent a poorly chosen value from dividing the address space in such
a way as to prevent large allocations. This may not be an issue on all
platforms. Allow the specification of a minimum number of bits so that
platforms desiring greater ASLR protection may determine where to place
the trade-off.
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -1568,6 +1568,28 @@ static struct ctl_table vm_table[] = {
.mode = 0644,
.proc_handler = proc_doulongvec_minmax,
},
+#ifdef CONFIG_HAVE_ARCH_MMAP_RND_BITS
+ {
+ .procname = "mmap_rnd_bits",
+ .data = &mmap_rnd_bits,
+ .maxlen = sizeof(mmap_rnd_bits),
+ .mode = 0600,
+ .proc_handler = proc_dointvec_minmax,
+ .extra1 = (void *) &mmap_rnd_bits_min,
+ .extra2 = (void *) &mmap_rnd_bits_max,
hm, why the typecasts? They're unneeded and are omitted everywhere(?)
else in kernel/sysctl.c.
Oh. Casting away constness.
What's the thinking here? They can change at any time so they aren't
const so we shouldn't declare them to be const?