Skip to content

Commit

Permalink
s390: redefine randomize_et_dyn for ELF_ET_DYN_BASE
Browse files Browse the repository at this point in the history
In preparation for moving ET_DYN randomization into the ELF loader (which
requires a static ELF_ET_DYN_BASE), this redefines s390's existing ET_DYN
randomization in a call to arch_mmap_rnd(). This refactoring results in
the same ET_DYN randomization on s390.

Signed-off-by: Kees Cook <keescook@chromium.org>
Acked-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Reviewed-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
kees authored and torvalds committed Apr 14, 2015
1 parent 2b68f6c commit c6f5b00
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 12 deletions.
8 changes: 5 additions & 3 deletions arch/s390/include/asm/elf.h
Original file line number Diff line number Diff line change
Expand Up @@ -161,10 +161,12 @@ extern unsigned int vdso_enabled;
/* This is the location that an ET_DYN program is loaded if exec'ed. Typical
use of this is to invoke "./ld.so someprog" to test out a new version of
the loader. We need to make sure that it is out of the way of the program
that it will "exec", and that there is sufficient room for the brk. */

that it will "exec", and that there is sufficient room for the brk. 64-bit
tasks are aligned to 4GB. */
extern unsigned long randomize_et_dyn(void);
#define ELF_ET_DYN_BASE randomize_et_dyn()
#define ELF_ET_DYN_BASE (randomize_et_dyn() + (is_32bit_task() ? \
(STACK_TOP / 3 * 2) : \
(STACK_TOP / 3 * 2) & ~((1UL << 32) - 1)))

/* This yields a mask that user programs can use to figure out what
instruction set this CPU supports. */
Expand Down
11 changes: 2 additions & 9 deletions arch/s390/mm/mmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -179,17 +179,10 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,

unsigned long randomize_et_dyn(void)
{
unsigned long base;

base = STACK_TOP / 3 * 2;
if (!is_32bit_task())
/* Align to 4GB */
base &= ~((1UL << 32) - 1);

if (current->flags & PF_RANDOMIZE)
base += arch_mmap_rnd();
return arch_mmap_rnd();

return base;
return 0UL;
}

#ifndef CONFIG_64BIT
Expand Down

0 comments on commit c6f5b00

Please sign in to comment.