The patch titled Subject: mm: fold arch_randomize_brk into ARCH_HAS_ELF_RANDOMIZE has been added to the -mm tree. Its filename is mm-fold-arch_randomize_brk-into-arch_has_elf_randomize.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/mm-fold-arch_randomize_brk-into-arch_has_elf_randomize.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/mm-fold-arch_randomize_brk-into-arch_has_elf_randomize.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Kees Cook <keescook@xxxxxxxxxxxx> Subject: mm: fold arch_randomize_brk into ARCH_HAS_ELF_RANDOMIZE arch_randomize_brk() is used on several architectures, even those that don't support ET_DYN ASLR. To avoid bulky extern/#define tricks, consolidate the support under CONFIG_ARCH_HAS_ELF_RANDOMIZE for the architectures that support it, while still handling CONFIG_COMPAT_BRK. Signed-off-by: Kees Cook <keescook@xxxxxxxxxxxx> Cc: Hector Marco-Gisbert <hecmargi@xxxxxx> Cc: Russell King <linux@xxxxxxxxxxxxxxxx> Reviewed-by: Ingo Molnar <mingo@xxxxxxxxxx> Cc: Catalin Marinas <catalin.marinas@xxxxxxx> Cc: Will Deacon <will.deacon@xxxxxxx> Cc: Ralf Baechle <ralf@xxxxxxxxxxxxxx> Cc: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx> Cc: Paul Mackerras <paulus@xxxxxxxxx> Cc: Michael Ellerman <mpe@xxxxxxxxxxxxxx> Cc: Martin Schwidefsky <schwidefsky@xxxxxxxxxx> Cc: Heiko Carstens <heiko.carstens@xxxxxxxxxx> Cc: Alexander Viro <viro@xxxxxxxxxxxxxxxxxx> Cc: Oleg Nesterov <oleg@xxxxxxxxxx> Cc: Andy Lutomirski <luto@xxxxxxxxxxxxxx> Cc: "David A. Long" <dave.long@xxxxxxxxxx> Cc: Andrey Ryabinin <a.ryabinin@xxxxxxxxxxx> Cc: Arun Chandran <achandran@xxxxxxxxxx> Cc: Yann Droneaud <ydroneaud@xxxxxxxxxx> Cc: Min-Hua Chen <orca.chen@xxxxxxxxx> Cc: Paul Burton <paul.burton@xxxxxxxxxx> Cc: Alex Smith <alex@xxxxxxxxxxxxxxxx> Cc: Markos Chandras <markos.chandras@xxxxxxxxxx> Cc: Vineeth Vijayan <vvijayan@xxxxxxxxxx> Cc: Jeff Bailey <jeffbailey@xxxxxxxxxx> Cc: Michael Holzheu <holzheu@xxxxxxxxxxxxxxxxxx> Cc: Ben Hutchings <ben@xxxxxxxxxxxxxxx> Cc: Behan Webster <behanw@xxxxxxxxxxxxxxxxxx> Cc: Ismael Ripoll <iripoll@xxxxxx> Cc: Jan-Simon Mller <dl9pf@xxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- arch/Kconfig | 1 + arch/arm/include/asm/elf.h | 4 ---- arch/arm64/include/asm/elf.h | 4 ---- arch/mips/include/asm/elf.h | 4 ---- arch/powerpc/include/asm/elf.h | 4 ---- arch/s390/include/asm/elf.h | 3 --- arch/x86/include/asm/elf.h | 3 --- fs/binfmt_elf.c | 4 +--- include/linux/elf-randomize.h | 12 ++++++++++++ 9 files changed, 14 insertions(+), 25 deletions(-) diff -puN arch/Kconfig~mm-fold-arch_randomize_brk-into-arch_has_elf_randomize arch/Kconfig --- a/arch/Kconfig~mm-fold-arch_randomize_brk-into-arch_has_elf_randomize +++ a/arch/Kconfig @@ -494,6 +494,7 @@ config ARCH_HAS_ELF_RANDOMIZE An architecture supports choosing randomized locations for stack, mmap, brk, and ET_DYN. Defined functions: - arch_mmap_rnd(), must respect (current->flags & PF_RANDOMIZE) + - arch_randomize_brk() # # ABI hall of shame diff -puN arch/arm/include/asm/elf.h~mm-fold-arch_randomize_brk-into-arch_has_elf_randomize arch/arm/include/asm/elf.h --- a/arch/arm/include/asm/elf.h~mm-fold-arch_randomize_brk-into-arch_has_elf_randomize +++ a/arch/arm/include/asm/elf.h @@ -125,10 +125,6 @@ int dump_task_regs(struct task_struct *t extern void elf_set_personality(const struct elf32_hdr *); #define SET_PERSONALITY(ex) elf_set_personality(&(ex)) -struct mm_struct; -extern unsigned long arch_randomize_brk(struct mm_struct *mm); -#define arch_randomize_brk arch_randomize_brk - #ifdef CONFIG_MMU #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1 struct linux_binprm; diff -puN arch/arm64/include/asm/elf.h~mm-fold-arch_randomize_brk-into-arch_has_elf_randomize arch/arm64/include/asm/elf.h --- a/arch/arm64/include/asm/elf.h~mm-fold-arch_randomize_brk-into-arch_has_elf_randomize +++ a/arch/arm64/include/asm/elf.h @@ -156,10 +156,6 @@ extern int arch_setup_additional_pages(s #define STACK_RND_MASK (0x3ffff >> (PAGE_SHIFT - 12)) #endif -struct mm_struct; -extern unsigned long arch_randomize_brk(struct mm_struct *mm); -#define arch_randomize_brk arch_randomize_brk - #ifdef CONFIG_COMPAT #ifdef __AARCH64EB__ diff -puN arch/mips/include/asm/elf.h~mm-fold-arch_randomize_brk-into-arch_has_elf_randomize arch/mips/include/asm/elf.h --- a/arch/mips/include/asm/elf.h~mm-fold-arch_randomize_brk-into-arch_has_elf_randomize +++ a/arch/mips/include/asm/elf.h @@ -410,10 +410,6 @@ struct linux_binprm; extern int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp); -struct mm_struct; -extern unsigned long arch_randomize_brk(struct mm_struct *mm); -#define arch_randomize_brk arch_randomize_brk - struct arch_elf_state { int fp_abi; int interp_fp_abi; diff -puN arch/powerpc/include/asm/elf.h~mm-fold-arch_randomize_brk-into-arch_has_elf_randomize arch/powerpc/include/asm/elf.h --- a/arch/powerpc/include/asm/elf.h~mm-fold-arch_randomize_brk-into-arch_has_elf_randomize +++ a/arch/powerpc/include/asm/elf.h @@ -128,10 +128,6 @@ extern int arch_setup_additional_pages(s (0x7ff >> (PAGE_SHIFT - 12)) : \ (0x3ffff >> (PAGE_SHIFT - 12))) -extern unsigned long arch_randomize_brk(struct mm_struct *mm); -#define arch_randomize_brk arch_randomize_brk - - #ifdef CONFIG_SPU_BASE /* Notes used in ET_CORE. Note name is "SPU/<fd>/<filename>". */ #define NT_SPU 1 diff -puN arch/s390/include/asm/elf.h~mm-fold-arch_randomize_brk-into-arch_has_elf_randomize arch/s390/include/asm/elf.h --- a/arch/s390/include/asm/elf.h~mm-fold-arch_randomize_brk-into-arch_has_elf_randomize +++ a/arch/s390/include/asm/elf.h @@ -226,9 +226,6 @@ struct linux_binprm; #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1 int arch_setup_additional_pages(struct linux_binprm *, int); -extern unsigned long arch_randomize_brk(struct mm_struct *mm); -#define arch_randomize_brk arch_randomize_brk - void *fill_cpu_elf_notes(void *ptr, struct save_area *sa, __vector128 *vxrs); #endif diff -puN arch/x86/include/asm/elf.h~mm-fold-arch_randomize_brk-into-arch_has_elf_randomize arch/x86/include/asm/elf.h --- a/arch/x86/include/asm/elf.h~mm-fold-arch_randomize_brk-into-arch_has_elf_randomize +++ a/arch/x86/include/asm/elf.h @@ -338,9 +338,6 @@ extern int compat_arch_setup_additional_ int uses_interp); #define compat_arch_setup_additional_pages compat_arch_setup_additional_pages -extern unsigned long arch_randomize_brk(struct mm_struct *mm); -#define arch_randomize_brk arch_randomize_brk - /* * True on X86_32 or when emulating IA32 on X86_64 */ diff -puN fs/binfmt_elf.c~mm-fold-arch_randomize_brk-into-arch_has_elf_randomize fs/binfmt_elf.c --- a/fs/binfmt_elf.c~mm-fold-arch_randomize_brk-into-arch_has_elf_randomize +++ a/fs/binfmt_elf.c @@ -1041,15 +1041,13 @@ static int load_elf_binary(struct linux_ current->mm->end_data = end_data; current->mm->start_stack = bprm->p; -#ifdef arch_randomize_brk if ((current->flags & PF_RANDOMIZE) && (randomize_va_space > 1)) { current->mm->brk = current->mm->start_brk = arch_randomize_brk(current->mm); -#ifdef CONFIG_COMPAT_BRK +#ifdef compat_brk_randomized current->brk_randomized = 1; #endif } -#endif if (current->personality & MMAP_PAGE_ZERO) { /* Why this, you ask??? Well SVr4 maps page 0 as read-only, diff -puN include/linux/elf-randomize.h~mm-fold-arch_randomize_brk-into-arch_has_elf_randomize include/linux/elf-randomize.h --- a/include/linux/elf-randomize.h~mm-fold-arch_randomize_brk-into-arch_has_elf_randomize +++ a/include/linux/elf-randomize.h @@ -1,10 +1,22 @@ #ifndef _ELF_RANDOMIZE_H #define _ELF_RANDOMIZE_H +struct mm_struct; + #ifndef CONFIG_ARCH_HAS_ELF_RANDOMIZE static inline unsigned long arch_mmap_rnd(void) { return 0; } +# if defined(arch_randomize_brk) && defined(CONFIG_COMPAT_BRK) +# define compat_brk_randomized +# endif +# ifndef arch_randomize_brk +# define arch_randomize_brk(mm) (mm->brk) +# endif #else extern unsigned long arch_mmap_rnd(void); +extern unsigned long arch_randomize_brk(struct mm_struct *mm); +# ifdef CONFIG_COMPAT_BRK +# define compat_brk_randomized +# endif #endif #endif _ Patches currently in -mm which might be from keescook@xxxxxxxxxxxx are arm-factor-out-mmap-aslr-into-mmap_rnd.patch mm-expose-arch_mmap_rnd-when-available.patch mm-move-randomize_et_dyn-into-elf_et_dyn_base.patch mm-split-et_dyn-aslr-from-mmap-aslr.patch mm-fold-arch_randomize_brk-into-arch_has_elf_randomize.patch lib-vsprintf-add-%pt-format-specifier.patch linux-next.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html