Re: [PATCH v4 03/10] arm64: standardize mmap_rnd() usage

2015-03-17 Thread Kees Cook
On Tue, Mar 17, 2015 at 7:47 AM, Will Deacon will.dea...@arm.com wrote:
 On Wed, Mar 04, 2015 at 09:10:47PM +, 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 keesc...@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.dea...@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

-- 
Kees Cook
Chrome OS Security
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Re: [PATCH v4 03/10] arm64: standardize mmap_rnd() usage

2015-03-17 Thread Will Deacon
On Wed, Mar 04, 2015 at 09:10:47PM +, 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 keesc...@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.dea...@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
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

[PATCH v4 03/10] arm64: standardize mmap_rnd() usage

2015-03-04 Thread Kees Cook
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 keesc...@chromium.org
---
 arch/arm64/include/asm/elf.h |  1 -
 arch/arm64/mm/mmap.c | 18 +++---
 2 files changed, 11 insertions(+), 8 deletions(-)

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;
}
 }
-- 
1.9.1

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev