From 1050b600577af24de93d2bb50ef81a7e8a3c7f01 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 30 Mar 2025 08:48:46 -0700 Subject: [PATCH] ELFParser: Sanity check ELF program headers Malformed ELF files could parse in a bad offset. --- Source/Tools/CommonTools/Linux/Utils/ELFParser.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Source/Tools/CommonTools/Linux/Utils/ELFParser.h b/Source/Tools/CommonTools/Linux/Utils/ELFParser.h index b4d43e56d..2742b87cf 100644 --- a/Source/Tools/CommonTools/Linux/Utils/ELFParser.h +++ b/Source/Tools/CommonTools/Linux/Utils/ELFParser.h @@ -45,7 +45,9 @@ struct ELFParser { } // Reset to beginning - lseek(fd, 0, SEEK_SET); + if (lseek(fd, 0, SEEK_SET) == -1) { + return false; + } uint8_t header[5]; if (pread(fd, header, sizeof(header), 0) == -1) { @@ -146,6 +148,12 @@ struct ELFParser { return false; } + // sanity check program header offset size. + if (ehdr.e_phoff > Size || (ehdr.e_phentsize * ehdr.e_phnum) > (Size - ehdr.e_phoff)) { + LogMan::Msg::EFmt("Program headers exceeds size of program"); + return false; + } + if (type == ::ELFLoader::ELFContainer::TYPE_X86_32) { fextl::vector phdrs32(ehdr.e_phnum);