From 3d7fbc1a0b5e11f729a171b6ac71336b28f78ae4 Mon Sep 17 00:00:00 2001 From: X512 Date: Thu, 9 Jan 2020 01:55:49 +0900 Subject: [PATCH] runtime_loader: allow loading executables without section table MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I4bfee1d1aa40730586123a70fb480ee91787c15d Reviewed-on: https://review.haiku-os.org/c/haiku/+/2089 Reviewed-by: Jérôme Duval --- src/system/runtime_loader/elf_haiku_version.cpp | 3 +++ src/system/runtime_loader/elf_load_image.cpp | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/system/runtime_loader/elf_haiku_version.cpp b/src/system/runtime_loader/elf_haiku_version.cpp index 60a6c37358..97fbed4073 100644 --- a/src/system/runtime_loader/elf_haiku_version.cpp +++ b/src/system/runtime_loader/elf_haiku_version.cpp @@ -23,6 +23,9 @@ static bool analyze_object_gcc_version(int fd, image_t* image, elf_ehdr& eheader, int32 sheaderSize, char* buffer, size_t bufferSize) { + if (sheaderSize <= 0) + return false; + if (sheaderSize > (int)bufferSize) { FATAL("%s: Cannot handle section headers bigger than %lu bytes\n", image->path, bufferSize); diff --git a/src/system/runtime_loader/elf_load_image.cpp b/src/system/runtime_loader/elf_load_image.cpp index 2e90e15ef2..9a72d6b0b0 100644 --- a/src/system/runtime_loader/elf_load_image.cpp +++ b/src/system/runtime_loader/elf_load_image.cpp @@ -416,7 +416,7 @@ parse_elf_header(elf_ehdr* eheader, int32* _pheaderSize, *_pheaderSize = eheader->e_phentsize * eheader->e_phnum; *_sheaderSize = eheader->e_shentsize * eheader->e_shnum; - if (*_pheaderSize <= 0 || *_sheaderSize <= 0) + if (*_pheaderSize <= 0) return B_NOT_AN_EXECUTABLE; return B_OK; @@ -444,7 +444,7 @@ parse_elf32_header(Elf32_Ehdr* eheader, int32* _pheaderSize, *_pheaderSize = eheader->e_phentsize * eheader->e_phnum; *_sheaderSize = eheader->e_shentsize * eheader->e_shnum; - if (*_pheaderSize <= 0 || *_sheaderSize <= 0) + if (*_pheaderSize <= 0) return B_NOT_AN_EXECUTABLE; return B_OK; @@ -469,7 +469,7 @@ parse_elf64_header(Elf64_Ehdr* eheader, int32* _pheaderSize, *_pheaderSize = eheader->e_phentsize * eheader->e_phnum; *_sheaderSize = eheader->e_shentsize * eheader->e_shnum; - if (*_pheaderSize <= 0 || *_sheaderSize <= 0) + if (*_pheaderSize <= 0) return B_NOT_AN_EXECUTABLE; return B_OK;