aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/Kconfig1
-rw-r--r--arch/arm/include/asm/elf.h4
-rw-r--r--arch/arm64/include/asm/elf.h4
-rw-r--r--arch/mips/include/asm/elf.h4
-rw-r--r--arch/powerpc/include/asm/elf.h4
-rw-r--r--arch/s390/include/asm/elf.h3
-rw-r--r--arch/x86/include/asm/elf.h3
-rw-r--r--fs/binfmt_elf.c4
-rw-r--r--include/linux/elf-randomize.h12
9 files changed, 14 insertions, 25 deletions
diff --git a/arch/Kconfig b/arch/Kconfig
index 474904a8e540..e1068987bad1 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -497,6 +497,7 @@ config ARCH_HAS_ELF_RANDOMIZE
497 An architecture supports choosing randomized locations for 497 An architecture supports choosing randomized locations for
498 stack, mmap, brk, and ET_DYN. Defined functions: 498 stack, mmap, brk, and ET_DYN. Defined functions:
499 - arch_mmap_rnd() 499 - arch_mmap_rnd()
500 - arch_randomize_brk()
500 501
501# 502#
502# ABI hall of shame 503# ABI hall of shame
diff --git a/arch/arm/include/asm/elf.h b/arch/arm/include/asm/elf.h
index afb9cafd3786..c1ff8ab12914 100644
--- a/arch/arm/include/asm/elf.h
+++ b/arch/arm/include/asm/elf.h
@@ -125,10 +125,6 @@ int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs);
125extern void elf_set_personality(const struct elf32_hdr *); 125extern void elf_set_personality(const struct elf32_hdr *);
126#define SET_PERSONALITY(ex) elf_set_personality(&(ex)) 126#define SET_PERSONALITY(ex) elf_set_personality(&(ex))
127 127
128struct mm_struct;
129extern unsigned long arch_randomize_brk(struct mm_struct *mm);
130#define arch_randomize_brk arch_randomize_brk
131
132#ifdef CONFIG_MMU 128#ifdef CONFIG_MMU
133#define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1 129#define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
134struct linux_binprm; 130struct linux_binprm;
diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h
index f724db00b235..faad6df49e5b 100644
--- a/arch/arm64/include/asm/elf.h
+++ b/arch/arm64/include/asm/elf.h
@@ -156,10 +156,6 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm,
156#define STACK_RND_MASK (0x3ffff >> (PAGE_SHIFT - 12)) 156#define STACK_RND_MASK (0x3ffff >> (PAGE_SHIFT - 12))
157#endif 157#endif
158 158
159struct mm_struct;
160extern unsigned long arch_randomize_brk(struct mm_struct *mm);
161#define arch_randomize_brk arch_randomize_brk
162
163#ifdef CONFIG_COMPAT 159#ifdef CONFIG_COMPAT
164 160
165#ifdef __AARCH64EB__ 161#ifdef __AARCH64EB__
diff --git a/arch/mips/include/asm/elf.h b/arch/mips/include/asm/elf.h
index 535f196ffe02..31d747d46a23 100644
--- a/arch/mips/include/asm/elf.h
+++ b/arch/mips/include/asm/elf.h
@@ -410,10 +410,6 @@ struct linux_binprm;
410extern int arch_setup_additional_pages(struct linux_binprm *bprm, 410extern int arch_setup_additional_pages(struct linux_binprm *bprm,
411 int uses_interp); 411 int uses_interp);
412 412
413struct mm_struct;
414extern unsigned long arch_randomize_brk(struct mm_struct *mm);
415#define arch_randomize_brk arch_randomize_brk
416
417struct arch_elf_state { 413struct arch_elf_state {
418 int fp_abi; 414 int fp_abi;
419 int interp_fp_abi; 415 int interp_fp_abi;
diff --git a/arch/powerpc/include/asm/elf.h b/arch/powerpc/include/asm/elf.h
index 57d289acb803..ee46ffef608e 100644
--- a/arch/powerpc/include/asm/elf.h
+++ b/arch/powerpc/include/asm/elf.h
@@ -128,10 +128,6 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm,
128 (0x7ff >> (PAGE_SHIFT - 12)) : \ 128 (0x7ff >> (PAGE_SHIFT - 12)) : \
129 (0x3ffff >> (PAGE_SHIFT - 12))) 129 (0x3ffff >> (PAGE_SHIFT - 12)))
130 130
131extern unsigned long arch_randomize_brk(struct mm_struct *mm);
132#define arch_randomize_brk arch_randomize_brk
133
134
135#ifdef CONFIG_SPU_BASE 131#ifdef CONFIG_SPU_BASE
136/* Notes used in ET_CORE. Note name is "SPU/<fd>/<filename>". */ 132/* Notes used in ET_CORE. Note name is "SPU/<fd>/<filename>". */
137#define NT_SPU 1 133#define NT_SPU 1
diff --git a/arch/s390/include/asm/elf.h b/arch/s390/include/asm/elf.h
index ff662155b2c4..a5c4978462c1 100644
--- a/arch/s390/include/asm/elf.h
+++ b/arch/s390/include/asm/elf.h
@@ -226,9 +226,6 @@ struct linux_binprm;
226#define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1 226#define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
227int arch_setup_additional_pages(struct linux_binprm *, int); 227int arch_setup_additional_pages(struct linux_binprm *, int);
228 228
229extern unsigned long arch_randomize_brk(struct mm_struct *mm);
230#define arch_randomize_brk arch_randomize_brk
231
232void *fill_cpu_elf_notes(void *ptr, struct save_area *sa, __vector128 *vxrs); 229void *fill_cpu_elf_notes(void *ptr, struct save_area *sa, __vector128 *vxrs);
233 230
234#endif 231#endif
diff --git a/arch/x86/include/asm/elf.h b/arch/x86/include/asm/elf.h
index 935588d95c82..f161c189c27b 100644
--- a/arch/x86/include/asm/elf.h
+++ b/arch/x86/include/asm/elf.h
@@ -339,9 +339,6 @@ extern int compat_arch_setup_additional_pages(struct linux_binprm *bprm,
339 int uses_interp); 339 int uses_interp);
340#define compat_arch_setup_additional_pages compat_arch_setup_additional_pages 340#define compat_arch_setup_additional_pages compat_arch_setup_additional_pages
341 341
342extern unsigned long arch_randomize_brk(struct mm_struct *mm);
343#define arch_randomize_brk arch_randomize_brk
344
345/* 342/*
346 * True on X86_32 or when emulating IA32 on X86_64 343 * True on X86_32 or when emulating IA32 on X86_64
347 */ 344 */
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
index b20c05477e90..241ef68d2893 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -1050,15 +1050,13 @@ static int load_elf_binary(struct linux_binprm *bprm)
1050 current->mm->end_data = end_data; 1050 current->mm->end_data = end_data;
1051 current->mm->start_stack = bprm->p; 1051 current->mm->start_stack = bprm->p;
1052 1052
1053#ifdef arch_randomize_brk
1054 if ((current->flags & PF_RANDOMIZE) && (randomize_va_space > 1)) { 1053 if ((current->flags & PF_RANDOMIZE) && (randomize_va_space > 1)) {
1055 current->mm->brk = current->mm->start_brk = 1054 current->mm->brk = current->mm->start_brk =
1056 arch_randomize_brk(current->mm); 1055 arch_randomize_brk(current->mm);
1057#ifdef CONFIG_COMPAT_BRK 1056#ifdef compat_brk_randomized
1058 current->brk_randomized = 1; 1057 current->brk_randomized = 1;
1059#endif 1058#endif
1060 } 1059 }
1061#endif
1062 1060
1063 if (current->personality & MMAP_PAGE_ZERO) { 1061 if (current->personality & MMAP_PAGE_ZERO) {
1064 /* Why this, you ask??? Well SVr4 maps page 0 as read-only, 1062 /* Why this, you ask??? Well SVr4 maps page 0 as read-only,
diff --git a/include/linux/elf-randomize.h b/include/linux/elf-randomize.h
index 7a4eda02d2b1..b5f0bda9472e 100644
--- a/include/linux/elf-randomize.h
+++ b/include/linux/elf-randomize.h
@@ -1,10 +1,22 @@
1#ifndef _ELF_RANDOMIZE_H 1#ifndef _ELF_RANDOMIZE_H
2#define _ELF_RANDOMIZE_H 2#define _ELF_RANDOMIZE_H
3 3
4struct mm_struct;
5
4#ifndef CONFIG_ARCH_HAS_ELF_RANDOMIZE 6#ifndef CONFIG_ARCH_HAS_ELF_RANDOMIZE
5static inline unsigned long arch_mmap_rnd(void) { return 0; } 7static inline unsigned long arch_mmap_rnd(void) { return 0; }
8# if defined(arch_randomize_brk) && defined(CONFIG_COMPAT_BRK)
9# define compat_brk_randomized
10# endif
11# ifndef arch_randomize_brk
12# define arch_randomize_brk(mm) (mm->brk)
13# endif
6#else 14#else
7extern unsigned long arch_mmap_rnd(void); 15extern unsigned long arch_mmap_rnd(void);
16extern unsigned long arch_randomize_brk(struct mm_struct *mm);
17# ifdef CONFIG_COMPAT_BRK
18# define compat_brk_randomized
19# endif
8#endif 20#endif
9 21
10#endif 22#endif