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(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);