summaryrefslogtreecommitdiff
path: root/linker/linker.cpp
diff options
context:
space:
mode:
authorNick Kralevich <nnk@google.com>2014-05-07 10:32:39 -0700
committerDmitriy Ivanov <dimitry@google.com>2014-05-08 13:17:17 -0700
commit2aebf5429bb1241a3298b5b642d38f73124c2026 (patch)
tree9380302829e56b061ee6df1b30babbe45b2bb798 /linker/linker.cpp
parenta3ce6bdb63cc1d657d9180269bf858af9fa685bf (diff)
Remove support for non-PIE executables
Don't support the dynamic linker loading ET_EXEC executables. Only support ET_DYN executables. Bug: 14566672 Change-Id: Ia1f2bfffe7ea867c1cd62e67d7fd637c60c0728d
Diffstat (limited to 'linker/linker.cpp')
-rwxr-xr-xlinker/linker.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/linker/linker.cpp b/linker/linker.cpp
index 08231eae0..1f32f6d09 100755
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -2071,6 +2071,12 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW(
si->dynamic = NULL;
si->ref_count = 1;
+ ElfW(Ehdr)* elf_hdr = reinterpret_cast<ElfW(Ehdr)*>(si->base);
+ if (elf_hdr->e_type != ET_DYN) {
+ __libc_format_fd(2, "error: only position independent executables (PIE) are supported.\n");
+ exit(EXIT_FAILURE);
+ }
+
// Use LD_LIBRARY_PATH and LD_PRELOAD (but only if we aren't setuid/setgid).
parse_LD_LIBRARY_PATH(ldpath_env);
parse_LD_PRELOAD(ldpreload_env);