Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cf0859d4 authored by Kees Cook's avatar Kees Cook Committed by Trilok Soni
Browse files

mips: extract logic for mmap_rnd()



In preparation for splitting out ET_DYN ASLR, extract the mmap ASLR
selection into a separate function.

Change-Id: I9851bf765016d7eb1f93a12b61ca9779b482abba
Signed-off-by: default avatarKees Cook <keescook@chromium.org>
Reviewed-by: default avatarIngo Molnar <mingo@kernel.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Git-commit: 1f0569df0b0285e7ec2432d804a4921b06a61618
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git


Signed-off-by: default avatarSe Wang (Patrick) Oh <sewango@codeaurora.org>
parent 11977f85
Loading
Loading
Loading
Loading
+16 −8
Original line number Diff line number Diff line
@@ -142,19 +142,27 @@ unsigned long arch_get_unmapped_area_topdown(struct file *filp,
			addr0, len, pgoff, flags, DOWN);
}

void arch_pick_mmap_layout(struct mm_struct *mm)
static unsigned long mmap_rnd(void)
{
	unsigned long random_factor = 0UL;
	unsigned long rnd;

	if (current->flags & PF_RANDOMIZE) {
		random_factor = get_random_int();
		random_factor = random_factor << PAGE_SHIFT;
	rnd = (unsigned long)get_random_int();
	rnd <<= PAGE_SHIFT;
	if (TASK_IS_32BIT_ADDR)
			random_factor &= 0xfffffful;
		rnd &= 0xfffffful;
	else
			random_factor &= 0xffffffful;
		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 = mmap_rnd();

	if (mmap_is_legacy()) {
		mm->mmap_base = TASK_UNMAPPED_BASE + random_factor;
		mm->get_unmapped_area = arch_get_unmapped_area;