diff options
Diffstat (limited to 'arch/mips/mm/mmap.c')
| -rw-r--r-- | arch/mips/mm/mmap.c | 24 | 
1 files changed, 16 insertions, 8 deletions
diff --git a/arch/mips/mm/mmap.c b/arch/mips/mm/mmap.c index f1baadd56e82..5c81fdd032c3 100644 --- a/arch/mips/mm/mmap.c +++ b/arch/mips/mm/mmap.c @@ -142,18 +142,26 @@ unsigned long arch_get_unmapped_area_topdown(struct file *filp,  			addr0, len, pgoff, flags, DOWN);  } +unsigned long arch_mmap_rnd(void) +{ +	unsigned long rnd; + +	rnd = (unsigned long)get_random_int(); +	rnd <<= PAGE_SHIFT; +	if (TASK_IS_32BIT_ADDR) +		rnd &= 0xfffffful; +	else +		rnd &= 0xffffffful; + +	return rnd; +} +  void arch_pick_mmap_layout(struct mm_struct *mm)  {  	unsigned long random_factor = 0UL; -	if (current->flags & PF_RANDOMIZE) { -		random_factor = get_random_int(); -		random_factor = random_factor << PAGE_SHIFT; -		if (TASK_IS_32BIT_ADDR) -			random_factor &= 0xfffffful; -		else -			random_factor &= 0xffffffful; -	} +	if (current->flags & PF_RANDOMIZE) +		random_factor = arch_mmap_rnd();  	if (mmap_is_legacy()) {  		mm->mmap_base = TASK_UNMAPPED_BASE + random_factor;  |