diff options
| -rw-r--r-- | arch/Kconfig | 1 | ||||
| -rw-r--r-- | arch/arm/include/asm/elf.h | 4 | ||||
| -rw-r--r-- | arch/arm64/include/asm/elf.h | 4 | ||||
| -rw-r--r-- | arch/mips/include/asm/elf.h | 4 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/elf.h | 4 | ||||
| -rw-r--r-- | arch/s390/include/asm/elf.h | 3 | ||||
| -rw-r--r-- | arch/x86/include/asm/elf.h | 3 | ||||
| -rw-r--r-- | fs/binfmt_elf.c | 4 | ||||
| -rw-r--r-- | include/linux/elf-randomize.h | 12 |
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); | |||
| 125 | extern void elf_set_personality(const struct elf32_hdr *); | 125 | extern 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 | ||
| 128 | struct mm_struct; | ||
| 129 | extern 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 |
| 134 | struct linux_binprm; | 130 | struct 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 | ||
| 159 | struct mm_struct; | ||
| 160 | extern 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; | |||
| 410 | extern int arch_setup_additional_pages(struct linux_binprm *bprm, | 410 | extern int arch_setup_additional_pages(struct linux_binprm *bprm, |
| 411 | int uses_interp); | 411 | int uses_interp); |
| 412 | 412 | ||
| 413 | struct mm_struct; | ||
| 414 | extern unsigned long arch_randomize_brk(struct mm_struct *mm); | ||
| 415 | #define arch_randomize_brk arch_randomize_brk | ||
| 416 | |||
| 417 | struct arch_elf_state { | 413 | struct 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 | ||
| 131 | extern 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 |
| 227 | int arch_setup_additional_pages(struct linux_binprm *, int); | 227 | int arch_setup_additional_pages(struct linux_binprm *, int); |
| 228 | 228 | ||
| 229 | extern unsigned long arch_randomize_brk(struct mm_struct *mm); | ||
| 230 | #define arch_randomize_brk arch_randomize_brk | ||
| 231 | |||
| 232 | void *fill_cpu_elf_notes(void *ptr, struct save_area *sa, __vector128 *vxrs); | 229 | void *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 | ||
| 342 | extern 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 | ||
| 4 | struct mm_struct; | ||
| 5 | |||
| 4 | #ifndef CONFIG_ARCH_HAS_ELF_RANDOMIZE | 6 | #ifndef CONFIG_ARCH_HAS_ELF_RANDOMIZE |
| 5 | static inline unsigned long arch_mmap_rnd(void) { return 0; } | 7 | static 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 |
| 7 | extern unsigned long arch_mmap_rnd(void); | 15 | extern unsigned long arch_mmap_rnd(void); |
| 16 | extern 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 |
