]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
PR 33406 SEGV in dump_dwarf_section
authorAlan Modra <amodra@gmail.com>
Tue, 9 Sep 2025 09:02:09 +0000 (18:32 +0930)
committerAlan Modra <amodra@gmail.com>
Tue, 9 Sep 2025 09:25:26 +0000 (18:55 +0930)
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.

binutils/objdump.c

index 290f7e51f660c324c703ef4c4bd597ba08430c2d..ee8823da05a6dee88690a4c6a2eb016644b93567 100644 (file)
@@ -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));