diff options
Diffstat (limited to 'fs/binfmt_elf.c')
| -rw-r--r-- | fs/binfmt_elf.c | 11 | 
1 files changed, 10 insertions, 1 deletions
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index dd0fdfc56d3..21ac5ee4b43 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -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  |