Message ID | 1425503454-7531-4-git-send-email-keescook@chromium.org (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
On Wed, Mar 04, 2015 at 09:10:47PM +0000, Kees Cook wrote: > In preparation for splitting out ET_DYN ASLR, this refactors the use of > mmap_rnd() to be used similarly to arm and x86. This additionally enables > mmap ASLR on legacy mmap layouts, which appeared to be missing on arm64, > and was already supported on arm. Additionally removes a copy/pasted > declaration of an unused function. > > Signed-off-by: Kees Cook <keescook@chromium.org> > --- > arch/arm64/include/asm/elf.h | 1 - > arch/arm64/mm/mmap.c | 18 +++++++++++------- > 2 files changed, 11 insertions(+), 8 deletions(-) Looks fine to me: Acked-by: Will Deacon <will.deacon@arm.com> Do you want me to pick this up, or are you taking it along with the rest of your series (it doesn't have any obvious dependencies to me)? Will
On Tue, Mar 17, 2015 at 7:47 AM, Will Deacon <will.deacon@arm.com> wrote: > On Wed, Mar 04, 2015 at 09:10:47PM +0000, Kees Cook wrote: >> In preparation for splitting out ET_DYN ASLR, this refactors the use of >> mmap_rnd() to be used similarly to arm and x86. This additionally enables >> mmap ASLR on legacy mmap layouts, which appeared to be missing on arm64, >> and was already supported on arm. Additionally removes a copy/pasted >> declaration of an unused function. >> >> Signed-off-by: Kees Cook <keescook@chromium.org> >> --- >> arch/arm64/include/asm/elf.h | 1 - >> arch/arm64/mm/mmap.c | 18 +++++++++++------- >> 2 files changed, 11 insertions(+), 8 deletions(-) > > Looks fine to me: > > Acked-by: Will Deacon <will.deacon@arm.com> > > Do you want me to pick this up, or are you taking it along with the rest of > your series (it doesn't have any obvious dependencies to me)? Thanks! Right now akpm is carrying it, since the series ends with changes that depend on all the per-arch refactoring. -Kees
diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h index 1f65be393139..f724db00b235 100644 --- a/arch/arm64/include/asm/elf.h +++ b/arch/arm64/include/asm/elf.h @@ -125,7 +125,6 @@ typedef struct user_fpsimd_state elf_fpregset_t; * the loader. We need to make sure that it is out of the way of the program * that it will "exec", and that there is sufficient room for the brk. */ -extern unsigned long randomize_et_dyn(unsigned long base); #define ELF_ET_DYN_BASE (2 * TASK_SIZE_64 / 3) /* diff --git a/arch/arm64/mm/mmap.c b/arch/arm64/mm/mmap.c index 54922d1275b8..ba776c01b552 100644 --- a/arch/arm64/mm/mmap.c +++ b/arch/arm64/mm/mmap.c @@ -49,15 +49,14 @@ static int mmap_is_legacy(void) static unsigned long mmap_rnd(void) { - unsigned long rnd = 0; + unsigned long rnd; - if (current->flags & PF_RANDOMIZE) - rnd = (long)get_random_int() & STACK_RND_MASK; + rnd = (unsigned long)get_random_int() & STACK_RND_MASK; return rnd << PAGE_SHIFT; } -static unsigned long mmap_base(void) +static unsigned long mmap_base(unsigned long rnd) { unsigned long gap = rlimit(RLIMIT_STACK); @@ -66,7 +65,7 @@ static unsigned long mmap_base(void) else if (gap > MAX_GAP) gap = MAX_GAP; - return PAGE_ALIGN(STACK_TOP - gap - mmap_rnd()); + return PAGE_ALIGN(STACK_TOP - gap - rnd); } /* @@ -75,15 +74,20 @@ static unsigned long mmap_base(void) */ void arch_pick_mmap_layout(struct mm_struct *mm) { + unsigned long random_factor = 0UL; + + if (current->flags & PF_RANDOMIZE) + random_factor = mmap_rnd(); + /* * Fall back to the standard layout if the personality bit is set, or * if the expected stack growth is unlimited: */ if (mmap_is_legacy()) { - mm->mmap_base = TASK_UNMAPPED_BASE; + mm->mmap_base = TASK_UNMAPPED_BASE + random_factor; mm->get_unmapped_area = arch_get_unmapped_area; } else { - mm->mmap_base = mmap_base(); + mm->mmap_base = mmap_base(random_factor); mm->get_unmapped_area = arch_get_unmapped_area_topdown; } }
In preparation for splitting out ET_DYN ASLR, this refactors the use of mmap_rnd() to be used similarly to arm and x86. This additionally enables mmap ASLR on legacy mmap layouts, which appeared to be missing on arm64, and was already supported on arm. Additionally removes a copy/pasted declaration of an unused function. Signed-off-by: Kees Cook <keescook@chromium.org> --- arch/arm64/include/asm/elf.h | 1 - arch/arm64/mm/mmap.c | 18 +++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-)