]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
readelf: Handle NULL phdr in handle_dynamic_symtab
authorMark Wielaard <mark@klomp.org>
Sat, 8 Feb 2025 23:07:13 +0000 (00:07 +0100)
committerMark Wielaard <mark@klomp.org>
Fri, 14 Feb 2025 07:55:10 +0000 (08:55 +0100)
A corrupt ELF file can have broken program headers, in which case
gelf_getphdr returns NULL. This could crash handle_dynamic_symtab
while searching for the PT_DYNAMIC phdr. Fix this by checking whether
gelf_phdr returns NULL.

  * src/readelf.c (handle_dynamic_symtab): Check whether
          gelf_getphdr returns NULL.

https://sourceware.org/bugzilla/show_bug.cgi?id=32655

Signed-off-by: Mark Wielaard <mark@klomp.org>
src/readelf.c

index c43fda35075a416de6b09433fced67d1741f60d2..21b92a08a6b6d1e5236e02a8f607f6e3491be23c 100644 (file)
@@ -2912,7 +2912,7 @@ handle_dynamic_symtab (Ebl *ebl)
   for (size_t i = 0; i < phnum; ++i)
     {
       phdr = gelf_getphdr (ebl->elf, i, &phdr_mem);
-      if (phdr->p_type == PT_DYNAMIC)
+      if (phdr == NULL || phdr->p_type == PT_DYNAMIC)
        break;
     }
   if (phdr == NULL)