From 2b862e45699be58a95261f095c816b306eb295ec Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 31 Jan 2021 11:29:23 +0100 Subject: [PATCH] LibELF: Don't validate ELF twice in DynamicLoader Validation was happening in two steps, some in the constructor, and then some later on, in load_from_image(). This made no sense so just move all the validation to the constructor. --- Userland/Libraries/LibELF/DynamicLoader.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Userland/Libraries/LibELF/DynamicLoader.cpp b/Userland/Libraries/LibELF/DynamicLoader.cpp index 5429c99fad..482758cec1 100644 --- a/Userland/Libraries/LibELF/DynamicLoader.cpp +++ b/Userland/Libraries/LibELF/DynamicLoader.cpp @@ -122,8 +122,15 @@ size_t DynamicLoader::calculate_tls_size() const bool DynamicLoader::validate() { + if (!m_elf_image.is_valid()) + return false; + auto* elf_header = (Elf32_Ehdr*)m_file_data; - return validate_elf_header(*elf_header, m_file_size) && validate_program_headers(*elf_header, m_file_size, (u8*)m_file_data, m_file_size, &m_program_interpreter); + if (!validate_elf_header(*elf_header, m_file_size)) + return false; + if (!validate_program_headers(*elf_header, m_file_size, (u8*)m_file_data, m_file_size, &m_program_interpreter)) + return false; + return true; } void* DynamicLoader::symbol_for_name(const char* name) @@ -138,9 +145,6 @@ void* DynamicLoader::symbol_for_name(const char* name) RefPtr DynamicLoader::load_from_image(unsigned flags, size_t total_tls_size) { - - m_valid = m_elf_image.is_valid(); - if (!m_valid) { dbgln("DynamicLoader::load_from_image failed: image is invalid"); return nullptr;