Commit a3defbe5 authored by Jiri Kosina's avatar Jiri Kosina Committed by Linus Torvalds
Browse files

binfmt_elf: fix PIE execution with randomization disabled

The case of address space randomization being disabled in runtime through
randomize_va_space sysctl is not treated properly in load_elf_binary(),
resulting in SIGKILL coming at exec() time for certain PIE-linked binaries
in case the randomization has been disabled at runtime prior to calling

Handle the randomize_va_space == 0 case the same way as if we were not
supporting .text randomization at all.

Based on original patch by H.J. Lu and Josh Boyer.

Signed-off-by: default avatarJiri Kosina <>
Cc: Ingo Molnar <>
Cc: Russell King <>
Cc: H.J. Lu <>
Cc: <>
Tested-by: default avatarJosh Boyer <>
Acked-by: default avatarNicolas Pitre <>
Cc: <>
Signed-off-by: default avatarAndrew Morton <>
Signed-off-by: default avatarLinus Torvalds <>
parent b35a35b5
......@@ -795,7 +795,16 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
* might try to exec. This is because the brk will
* follow the loader, and is not movable. */
#if defined(CONFIG_X86) || defined(CONFIG_ARM)
load_bias = 0;
/* Memory randomization might have been switched off
* in runtime via sysctl.
* If that is the case, retain the original non-zero
* load_bias value in order to establish proper
* non-randomized mappings.
if (current->flags & PF_RANDOMIZE)
load_bias = 0;
load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr);
load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr);
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment