diff options
author | Marcus Meissner <meissner@suse.de> | 2006-12-06 23:36:24 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-07 11:39:33 -0500 |
commit | 59287c0913cc9a6c75712a775f6c1c1ef418ef3b (patch) | |
tree | 0f1c12edec9496275e2b2a373a12b1e9e2e91173 /fs | |
parent | b23984d0a12a4821b2e9712c71550f321eb88bb5 (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')
-rw-r--r-- | fs/binfmt_elf.c | 8 |
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, |