[binutils-gdb] PR 33406 SEGV in dump_dwarf_section

Alan Modra amodra@sourceware.org
Tue Sep 9 09:26:33 GMT 2025


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=f87a66db645caf8cc0e6fc87b0c28c78a38af59b

commit f87a66db645caf8cc0e6fc87b0c28c78a38af59b
Author: Alan Modra <amodra@gmail.com>
Date:   Tue Sep 9 18:32:09 2025 +0930

    PR 33406 SEGV in dump_dwarf_section
    
    Trying to dump .sframe in a PE file results in a segfault accessing
    elf_section_data.
    
            * objdump (dump_sframe_section, dump_dwarf_section): Don't access
            elf_section_type without first checking the file is ELF.

Diff:
---
 binutils/objdump.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/binutils/objdump.c b/binutils/objdump.c
index 290f7e51f66..ee8823da05a 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -4485,7 +4485,8 @@ dump_dwarf_section (bfd *abfd, asection *section,
   else
     match = name;
 
-  if (elf_section_type (section) == SHT_GNU_SFRAME)
+  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
+      && elf_section_type (section) == SHT_GNU_SFRAME)
     match = ".sframe";
 
   for (i = 0; i < max; i++)
@@ -4993,9 +4994,10 @@ dump_sframe_section (bfd *abfd, const char *sect_name, bool is_mainfile)
 	 SHT_GNU_SFRAME.  For SFrame sections from Binutils 2.44 or earlier,
 	 check explcitly for SFrame sections of type SHT_PROGBITS and name
 	 ".sframe" to allow them.  */
-      else if (elf_section_type (sec) != SHT_GNU_SFRAME
-	       && !(elf_section_type (sec) == SHT_PROGBITS
-		    && strcmp (sect_name, ".sframe") == 0))
+      else if (bfd_get_flavour (abfd) != bfd_target_elf_flavour
+	       || (elf_section_type (sec) != SHT_GNU_SFRAME
+		   && !(elf_section_type (sec) == SHT_PROGBITS
+			&& strcmp (sect_name, ".sframe") == 0)))
 	{
 	  printf (_("Section %s does not contain SFrame data\n\n"),
 		  sanitize_string (sect_name));


More information about the Binutils-cvs mailing list