aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
authorKees Cook <keescook@chromium.org>2015-04-14 18:48:00 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-04-14 19:49:05 -0400
commit2b68f6caeac271620cd2f9362aeaed360e317df0 (patch)
tree8dae384ab3db6e078675a9bb63e4f58b0ab50dd4 /arch/s390
parent8e89a356feb6f196824a72101861d931a97ac2d2 (diff)
mm: expose arch_mmap_rnd when available
When an architecture fully supports randomizing the ELF load location, a per-arch mmap_rnd() function is used to find a randomized mmap base. In preparation for randomizing the location of ET_DYN binaries separately from mmap, this renames and exports these functions as arch_mmap_rnd(). Additionally introduces CONFIG_ARCH_HAS_ELF_RANDOMIZE for describing this feature on architectures that support it (which is a superset of ARCH_BINFMT_ELF_RANDOMIZE_PIE, since s390 already supports a separated ET_DYN ASLR from mmap ASLR without the ARCH_BINFMT_ELF_RANDOMIZE_PIE logic). Signed-off-by: Kees Cook <keescook@chromium.org> Cc: Hector Marco-Gisbert <hecmargi@upv.es> Cc: Russell King <linux@arm.linux.org.uk> Reviewed-by: Ingo Molnar <mingo@kernel.org> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will.deacon@arm.com> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Alexander Viro <viro@zeniv.linux.org.uk> Cc: Oleg Nesterov <oleg@redhat.com> Cc: Andy Lutomirski <luto@amacapital.net> Cc: "David A. Long" <dave.long@linaro.org> Cc: Andrey Ryabinin <a.ryabinin@samsung.com> Cc: Arun Chandran <achandran@mvista.com> Cc: Yann Droneaud <ydroneaud@opteya.com> Cc: Min-Hua Chen <orca.chen@gmail.com> Cc: Paul Burton <paul.burton@imgtec.com> Cc: Alex Smith <alex@alex-smith.me.uk> Cc: Markos Chandras <markos.chandras@imgtec.com> Cc: Vineeth Vijayan <vvijayan@mvista.com> Cc: Jeff Bailey <jeffbailey@google.com> Cc: Michael Holzheu <holzheu@linux.vnet.ibm.com> Cc: Ben Hutchings <ben@decadent.org.uk> Cc: Behan Webster <behanw@converseincode.com> Cc: Ismael Ripoll <iripoll@upv.es> Cc: Jan-Simon Mller <dl9pf@gmx.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/Kconfig1
-rw-r--r--arch/s390/mm/mmap.c8
2 files changed, 5 insertions, 4 deletions
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
index f6aebcb7a0f8..ac2b75d74cd2 100644
--- a/arch/s390/Kconfig
+++ b/arch/s390/Kconfig
@@ -65,6 +65,7 @@ config S390
65 def_bool y 65 def_bool y
66 select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE 66 select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
67 select ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS 67 select ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS
68 select ARCH_HAS_ELF_RANDOMIZE
68 select ARCH_HAS_GCOV_PROFILE_ALL 69 select ARCH_HAS_GCOV_PROFILE_ALL
69 select ARCH_HAS_SG_CHAIN 70 select ARCH_HAS_SG_CHAIN
70 select ARCH_HAVE_NMI_SAFE_CMPXCHG 71 select ARCH_HAVE_NMI_SAFE_CMPXCHG
diff --git a/arch/s390/mm/mmap.c b/arch/s390/mm/mmap.c
index db57078075c5..a94504d99c47 100644
--- a/arch/s390/mm/mmap.c
+++ b/arch/s390/mm/mmap.c
@@ -60,7 +60,7 @@ static inline int mmap_is_legacy(void)
60 return sysctl_legacy_va_layout; 60 return sysctl_legacy_va_layout;
61} 61}
62 62
63static unsigned long mmap_rnd(void) 63unsigned long arch_mmap_rnd(void)
64{ 64{
65 if (is_32bit_task()) 65 if (is_32bit_task())
66 return (get_random_int() & 0x7ff) << PAGE_SHIFT; 66 return (get_random_int() & 0x7ff) << PAGE_SHIFT;
@@ -187,7 +187,7 @@ unsigned long randomize_et_dyn(void)
187 base &= ~((1UL << 32) - 1); 187 base &= ~((1UL << 32) - 1);
188 188
189 if (current->flags & PF_RANDOMIZE) 189 if (current->flags & PF_RANDOMIZE)
190 base += mmap_rnd(); 190 base += arch_mmap_rnd();
191 191
192 return base; 192 return base;
193} 193}
@@ -203,7 +203,7 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
203 unsigned long random_factor = 0UL; 203 unsigned long random_factor = 0UL;
204 204
205 if (current->flags & PF_RANDOMIZE) 205 if (current->flags & PF_RANDOMIZE)
206 random_factor = mmap_rnd(); 206 random_factor = arch_mmap_rnd();
207 207
208 /* 208 /*
209 * Fall back to the standard layout if the personality 209 * Fall back to the standard layout if the personality
@@ -283,7 +283,7 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
283 unsigned long random_factor = 0UL; 283 unsigned long random_factor = 0UL;
284 284
285 if (current->flags & PF_RANDOMIZE) 285 if (current->flags & PF_RANDOMIZE)
286 random_factor = mmap_rnd(); 286 random_factor = arch_mmap_rnd();
287 287
288 /* 288 /*
289 * Fall back to the standard layout if the personality 289 * Fall back to the standard layout if the personality