From: Michael Tremer Date: Fri, 3 Jan 2025 08:30:58 +0000 (+0000) Subject: ELF: Read the number of program headers only once X-Git-Tag: 0.9.30~572 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ff06e416377fb6f9838801ce662aa1439f5422d2;p=pakfire.git ELF: Read the number of program headers only once Signed-off-by: Michael Tremer --- diff --git a/src/pakfire/elf.c b/src/pakfire/elf.c index 148cf254f..10f25a22b 100644 --- a/src/pakfire/elf.c +++ b/src/pakfire/elf.c @@ -49,6 +49,9 @@ struct pakfire_elf { // ELF Header GElf_Ehdr ehdr; + // Number of Program Headers + size_t phnum; + // Strings size_t shstrndx; @@ -102,6 +105,14 @@ static int pakfire_elf_open_elf(struct pakfire_elf* self) { return -EINVAL; } + // Fetch the total numbers of program headers + r = elf_getphdrnum(self->elf, &self->phnum); + if (r) { + ERROR(self->ctx, + "Could not fetch number of program headers: %s\n", elf_errmsg(-1)); + return -EINVAL; + } + // Find the strings r = elf_getshdrstrndx(self->elf, &self->shstrndx); if (r < 0) { @@ -471,20 +482,9 @@ int pakfire_elf_has_ssp(struct pakfire_elf* self) { int pakfire_elf_has_execstack(struct pakfire_elf* self) { GElf_Phdr phdr; - int r; - - size_t phnum = 0; - - // Fetch the total numbers of program headers - r = elf_getphdrnum(self->elf, &phnum); - if (r) { - ERROR(self->ctx, - "Could not fetch number of program headers: %s\n", elf_errmsg(-1)); - return -EINVAL; - } // Walk through all program headers - for (unsigned int i = 0; i < phnum; i++) { + for (unsigned int i = 0; i < self->phnum; i++) { if (!gelf_getphdr(self->elf, i, &phdr)) { ERROR(self->ctx, "Could not parse program header: %s\n", elf_errmsg(-1)); return -ENOTSUP;