summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandre Ghiti <alex@ghiti.fr>2019-09-23 18:38:50 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2019-09-24 18:54:11 -0400
commite7142bf5d231f3ccdf6ea6764d5080999b8e299d (patch)
tree3401d4fe9800da087ab54c7c7bc4189c1b6b0d49
parent67f3977f805b34cf0e41090679800d2091d41d49 (diff)
arm64, mm: make randomization selected by generic topdown mmap layout
This commits selects ARCH_HAS_ELF_RANDOMIZE when an arch uses the generic topdown mmap layout functions so that this security feature is on by default. Note that this commit also removes the possibility for arm64 to have elf randomization and no MMU: without MMU, the security added by randomization is worth nothing. Link: http://lkml.kernel.org/r/20190730055113.23635-6-alex@ghiti.fr Signed-off-by: Alexandre Ghiti <alex@ghiti.fr> Acked-by: Catalin Marinas <catalin.marinas@arm.com> Acked-by: Kees Cook <keescook@chromium.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Luis Chamberlain <mcgrof@kernel.org> Cc: Albert Ou <aou@eecs.berkeley.edu> Cc: Alexander Viro <viro@zeniv.linux.org.uk> Cc: Christoph Hellwig <hch@infradead.org> Cc: James Hogan <jhogan@kernel.org> Cc: Palmer Dabbelt <palmer@sifive.com> Cc: Paul Burton <paul.burton@mips.com> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Russell King <linux@armlinux.org.uk> Cc: Will Deacon <will.deacon@arm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--arch/Kconfig1
-rw-r--r--arch/arm64/Kconfig1
-rw-r--r--arch/arm64/kernel/process.c8
-rw-r--r--mm/util.c11
4 files changed, 10 insertions, 11 deletions
diff --git a/arch/Kconfig b/arch/Kconfig
index dfce421b8e8a..5f8a5d84dbbe 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -715,6 +715,7 @@ config HAVE_ARCH_COMPAT_MMAP_BASES
715config ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT 715config ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT
716 bool 716 bool
717 depends on MMU 717 depends on MMU
718 select ARCH_HAS_ELF_RANDOMIZE
718 719
719config HAVE_COPY_THREAD_TLS 720config HAVE_COPY_THREAD_TLS
720 bool 721 bool
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index 2d4b7044063c..866e05882799 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -15,7 +15,6 @@ config ARM64
15 select ARCH_HAS_DMA_COHERENT_TO_PFN 15 select ARCH_HAS_DMA_COHERENT_TO_PFN
16 select ARCH_HAS_DMA_PREP_COHERENT 16 select ARCH_HAS_DMA_PREP_COHERENT
17 select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI 17 select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI
18 select ARCH_HAS_ELF_RANDOMIZE
19 select ARCH_HAS_FAST_MULTIPLIER 18 select ARCH_HAS_FAST_MULTIPLIER
20 select ARCH_HAS_FORTIFY_SOURCE 19 select ARCH_HAS_FORTIFY_SOURCE
21 select ARCH_HAS_GCOV_PROFILE_ALL 20 select ARCH_HAS_GCOV_PROFILE_ALL
diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
index 03689c0beb34..a47462def04b 100644
--- a/arch/arm64/kernel/process.c
+++ b/arch/arm64/kernel/process.c
@@ -557,14 +557,6 @@ unsigned long arch_align_stack(unsigned long sp)
557 return sp & ~0xf; 557 return sp & ~0xf;
558} 558}
559 559
560unsigned long arch_randomize_brk(struct mm_struct *mm)
561{
562 if (is_compat_task())
563 return randomize_page(mm->brk, SZ_32M);
564 else
565 return randomize_page(mm->brk, SZ_1G);
566}
567
568/* 560/*
569 * Called from setup_new_exec() after (COMPAT_)SET_PERSONALITY. 561 * Called from setup_new_exec() after (COMPAT_)SET_PERSONALITY.
570 */ 562 */
diff --git a/mm/util.c b/mm/util.c
index 7922726f0a8f..3ad6db9a722e 100644
--- a/mm/util.c
+++ b/mm/util.c
@@ -321,7 +321,15 @@ unsigned long randomize_stack_top(unsigned long stack_top)
321} 321}
322 322
323#ifdef CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT 323#ifdef CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT
324#ifdef CONFIG_ARCH_HAS_ELF_RANDOMIZE 324unsigned long arch_randomize_brk(struct mm_struct *mm)
325{
326 /* Is the current task 32bit ? */
327 if (!IS_ENABLED(CONFIG_64BIT) || is_compat_task())
328 return randomize_page(mm->brk, SZ_32M);
329
330 return randomize_page(mm->brk, SZ_1G);
331}
332
325unsigned long arch_mmap_rnd(void) 333unsigned long arch_mmap_rnd(void)
326{ 334{
327 unsigned long rnd; 335 unsigned long rnd;
@@ -335,7 +343,6 @@ unsigned long arch_mmap_rnd(void)
335 343
336 return rnd << PAGE_SHIFT; 344 return rnd << PAGE_SHIFT;
337} 345}
338#endif /* CONFIG_ARCH_HAS_ELF_RANDOMIZE */
339 346
340static int mmap_is_legacy(struct rlimit *rlim_stack) 347static int mmap_is_legacy(struct rlimit *rlim_stack)
341{ 348{