From a3a9016701e487a5ca92d83b8cff179a190cdeb2 Mon Sep 17 00:00:00 2001 From: Andrew Kaster Date: Thu, 31 Dec 2020 17:51:21 -0700 Subject: [PATCH] DynamicLoader: Tell the linker to not add a PT_INTERP header Use the GNU LD option --no-dynamic-linker. This allows uncommenting some code in the Kernel that gets upset if your ELF interpreter has its own interpreter. --- Kernel/Syscalls/execve.cpp | 10 ++++------ Userland/DynamicLoader/CMakeLists.txt | 1 + 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Kernel/Syscalls/execve.cpp b/Kernel/Syscalls/execve.cpp index 35b8d81b9e..c386f1b49b 100644 --- a/Kernel/Syscalls/execve.cpp +++ b/Kernel/Syscalls/execve.cpp @@ -634,12 +634,10 @@ KResultOr> Process::find_elf_interpreter_for_exec return KResult(-ENOEXEC); } - // FIXME: Uncomment this - // How do we get gcc to not insert an interpreter section to /usr/lib/Loader.so itself? - // if (!interpreter_interpreter_path.is_empty()) { - // dbgln("exec({}): Interpreter ({}) has its own interpreter ({})! No thank you!", path, interpreter_description->absolute_path(), interpreter_interpreter_path); - // return KResult(-ELOOP); - // } + if (!interpreter_interpreter_path.is_empty()) { + dbgln("exec({}): Interpreter ({}) has its own interpreter ({})! No thank you!", path, interpreter_description->absolute_path(), interpreter_interpreter_path); + return KResult(-ELOOP); + } return interpreter_description; } diff --git a/Userland/DynamicLoader/CMakeLists.txt b/Userland/DynamicLoader/CMakeLists.txt index 2a89e994c6..4b022f4f78 100644 --- a/Userland/DynamicLoader/CMakeLists.txt +++ b/Userland/DynamicLoader/CMakeLists.txt @@ -19,4 +19,5 @@ set(SOURCES ${LOADER_SOURCES} ${AK_SOURCES} ${ELF_SOURCES} ${LIBC_SOURCES1} ${LI set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -nostdlib -pie -fpic -DNO_TLS") add_executable(Loader.so ${SOURCES}) +target_link_options(Loader.so PRIVATE LINKER:--no-dynamic-linker) install(TARGETS Loader.so RUNTIME DESTINATION usr/lib/)