aboutsummaryrefslogtreecommitdiffstats
path: root/fs/binfmt_elf.c
diff options
context:
space:
mode:
authorMarcus Meissner <meissner@suse.de>2006-12-06 23:36:24 -0500
committerLinus Torvalds <torvalds@woody.osdl.org>2006-12-07 11:39:33 -0500
commit59287c0913cc9a6c75712a775f6c1c1ef418ef3b (patch)
tree0f1c12edec9496275e2b2a373a12b1e9e2e91173 /fs/binfmt_elf.c
parentb23984d0a12a4821b2e9712c71550f321eb88bb5 (diff)
[PATCH] binfmt_elf: randomize PIE binaries (2nd try)
Randomizes -pie compiled binaries from 64k (0x10000) up to ELF_ET_DYN_BASE. 0 -> 64k is excluded to allow NULL ptr accesses to fail. Signed-off-by: Marcus Meissner <meissner@suse.de> Cc: Ingo Molnar <mingo@elte.hu> Cc: Dave Jones <davej@codemonkey.org.uk> Cc: Arjan van de Ven <arjan@linux.intel.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/binfmt_elf.c')
-rw-r--r--fs/binfmt_elf.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
index cc72bb43061d..b2efbaead6c3 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -856,7 +856,13 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
856 * default mmap base, as well as whatever program they 856 * default mmap base, as well as whatever program they
857 * might try to exec. This is because the brk will 857 * might try to exec. This is because the brk will
858 * follow the loader, and is not movable. */ 858 * follow the loader, and is not movable. */
859 load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr); 859 if (current->flags & PF_RANDOMIZE)
860 load_bias = randomize_range(0x10000,
861 ELF_ET_DYN_BASE,
862 0);
863 else
864 load_bias = ELF_ET_DYN_BASE;
865 load_bias = ELF_PAGESTART(load_bias - vaddr);
860 } 866 }
861 867
862 error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt, 868 error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt,