diff --git a/Userland/Libraries/LibELF/DynamicLoader.cpp b/Userland/Libraries/LibELF/DynamicLoader.cpp index c65f2dd1e0b..5c8a7f9be82 100644 --- a/Userland/Libraries/LibELF/DynamicLoader.cpp +++ b/Userland/Libraries/LibELF/DynamicLoader.cpp @@ -54,7 +54,10 @@ Result, DlErrorMessage> DynamicLoader::try_create(i return DlErrorMessage { "DynamicLoader::try_create mmap" }; } - return adopt_ref(*new DynamicLoader(fd, move(filename), data, size)); + auto loader = adopt_ref(*new DynamicLoader(fd, move(filename), data, size)); + if (!loader->is_valid()) + return DlErrorMessage { "ELF image validation failed" }; + return loader; } DynamicLoader::DynamicLoader(int fd, String filename, void* data, size_t size) @@ -64,8 +67,9 @@ DynamicLoader::DynamicLoader(int fd, String filename, void* data, size_t size) , m_file_data(data) , m_elf_image((u8*)m_file_data, m_file_size) { - m_tls_size_of_current_object = calculate_tls_size(); m_valid = validate(); + if (m_valid) + m_tls_size_of_current_object = calculate_tls_size(); } DynamicLoader::~DynamicLoader()