|
@@ -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;
|
|
|
+ else
|
|
|
+ load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr);
|
|
|
#else
|
|
|
load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr);
|
|
|
#endif
|