From adafa841f73815607a36238c8089a4c0a7a1be40 Mon Sep 17 00:00:00 2001 From: John Reiser Date: Fri, 24 Dec 2021 15:32:19 -0800 Subject: [PATCH] Some PT_LOAD must have (p_flags & PF_X) https://github.com/upx/upx/issues/511 modified: p_lx_elf.cpp --- src/p_lx_elf.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/p_lx_elf.cpp b/src/p_lx_elf.cpp index 1e38ff30..e80ec077 100644 --- a/src/p_lx_elf.cpp +++ b/src/p_lx_elf.cpp @@ -2168,6 +2168,9 @@ bool PackLinuxElf32::canPack() } check_pt_load(phdr); } + if (!pload_x0) { + throwCantPack("No PT_LOAD has (p_flags & PF_X)"); + } // elf_find_dynamic() returns 0 if 0==dynseg. dynstr= (char const *)elf_find_dynamic(Elf32_Dyn::DT_STRTAB); dynsym= (Elf32_Sym const *)elf_find_dynamic(Elf32_Dyn::DT_SYMTAB); @@ -2563,6 +2566,9 @@ PackLinuxElf64::canPack() } check_pt_load(phdr); } + if (!pload_x0) { + throwCantPack("No PT_LOAD has (p_flags & PF_X)"); + } // elf_find_dynamic() returns 0 if 0==dynseg. dynstr= (char const *)elf_find_dynamic(Elf64_Dyn::DT_STRTAB); dynsym= (Elf64_Sym const *)elf_find_dynamic(Elf64_Dyn::DT_SYMTAB);