提交 c6f5b001 编写于 作者: K Kees Cook 提交者: Linus Torvalds

s390: redefine randomize_et_dyn for ELF_ET_DYN_BASE

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: NKees Cook <keescook@chromium.org>
Acked-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Reviewed-by: NIngo Molnar <mingo@kernel.org>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 2b68f6ca
......@@ -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. */
......
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册