Message ID | 1425503454-7531-4-git-send-email-keescook@chromium.org (mailing list archive) |
---|---|
State | New, archived |
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 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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(-)