On Thu, Feb 02, 2017 at 09:23:33PM +1100, Michael Ellerman wrote:
> +config ARCH_MMAP_RND_BITS_MIN
> +     # On 64-bit up to 1G of address space (2^30)
> +     default 12 if 64BIT && PPC_256K_PAGES   # 256K (2^18), = 30 - 18 = 12
> +     default 14 if 64BIT && PPC_64K_PAGES    # 64K  (2^16), = 30 - 16 = 14
> +     default 16 if 64BIT && PPC_16K_PAGES    # 16K  (2^14), = 30 - 14 = 16
> +     default 18 if 64BIT                     # 4K   (2^12), = 30 - 12 = 18
> +     default ARCH_MMAP_RND_COMPAT_BITS_MIN
> +
> +config ARCH_MMAP_RND_BITS_MAX
> +     # On 64-bit up to 32T of address space (2^45)

I thought it was 64T, TASK_SIZE_USER64 is 2^46?

<snip>

> I also have what I think is a better hunk for that:
> 
>  unsigned long arch_mmap_rnd(void)
>  {
> -     unsigned long rnd;
> +     unsigned long shift, rnd;
>  
> -     /* 8MB for 32bit, 1GB for 64bit */
> +     shift = mmap_rnd_bits;
> +#ifdef CONFIG_COMPAT
>       if (is_32bit_task())
> -             rnd = (unsigned long)get_random_int() % (1<<(23-PAGE_SHIFT));
> -     else
> -             rnd = (unsigned long)get_random_int() % (1<<(30-PAGE_SHIFT));
> +             shift = mmap_rnd_compat_bits;
> +#endif
> +
> +     rnd = (unsigned long)get_random_int() % (1 << shift);
> 
> But I'm just nit picking I guess :)
>

No.. the version above is nicer IMHO

Balbir 

Reply via email to