Prevent a seg-fault from objdup when disassembling binaries which do not contain...
authorAdam Lackorzymski <adam@os.inf.tu-dresden.de>
Wed, 12 Jun 2019 14:05:21 +0000 (15:05 +0100)
committerNick Clifton <nickc@redhat.com>
Wed, 12 Jun 2019 14:05:21 +0000 (15:05 +0100)
PR 24643
* elf32-arm.c (arm_elf_find_function): Fail if the symol table is
absent, or the bfd is not in the ELF formart.
* elfnn-aarch64.c (aarch64_elf_find_function): Likewise.

bfd/ChangeLog
bfd/elf32-arm.c
bfd/elfnn-aarch64.c

index 72f35b8873884062573c80c9f50c0cce52fde2b6..b31e798bbb42ca9522a6c0e164f9f77c063cd54b 100644 (file)
@@ -1,3 +1,10 @@
+2019-06-12  Adam Lackorzymski  <adam@os.inf.tu-dresden.de>
+
+       PR 24643
+       * elf32-arm.c (arm_elf_find_function): Fail if the symol table is
+       absent, or the bfd is not in the ELF formart.
+       * elfnn-aarch64.c (aarch64_elf_find_function): Likewise.
+
 2019-06-10  Christos Zoulas  <christos@zoulas.com>
 
        PR 24650
index d35d609c65218f185ca267d79533644378834ca6..52fd48f6ec98f8c104498b2a461d2a622d6a909f 100644 (file)
@@ -15983,12 +15983,12 @@ elf32_arm_is_target_special_symbol (bfd * abfd ATTRIBUTE_UNUSED, asymbol * sym)
                                         BFD_ARM_SPECIAL_SYM_TYPE_ANY);
 }
 
-/* This is a copy of elf_find_function() from elf.c except that
+/* This is a version of _bfd_elf_find_function() from dwarf2.c except that
    ARM mapping symbols are ignored when looking for function names
    and STT_ARM_TFUNC is considered to a function type.  */
 
 static bfd_boolean
-arm_elf_find_function (bfd *        abfd ATTRIBUTE_UNUSED,
+arm_elf_find_function (bfd *        abfd,
                       asymbol **    symbols,
                       asection *    section,
                       bfd_vma       offset,
@@ -16000,6 +16000,12 @@ arm_elf_find_function (bfd *        abfd ATTRIBUTE_UNUSED,
   bfd_vma low_func = 0;
   asymbol ** p;
 
+  if (symbols == NULL)
+    return FALSE;
+
+  if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
+    return FALSE;
+
   for (p = symbols; *p != NULL; p++)
     {
       elf_symbol_type *q;
index 282418dc66fdeb0185dc8a3fe9e50d0a4d6cd141..e33a5c6207f8c8510aba7816fcea2092f043ce9f 100644 (file)
@@ -7956,22 +7956,28 @@ elfNN_aarch64_is_target_special_symbol (bfd *abfd ATTRIBUTE_UNUSED,
                                             BFD_AARCH64_SPECIAL_SYM_TYPE_ANY);
 }
 
-/* This is a copy of elf_find_function () from elf.c except that
+/* This is a version of _bfd_elf_find_function() from dwarf2.c except that
    AArch64 mapping symbols are ignored when looking for function names.  */
 
 static bfd_boolean
-aarch64_elf_find_function (bfd *abfd ATTRIBUTE_UNUSED,
-                          asymbol **symbols,
-                          asection *section,
-                          bfd_vma offset,
-                          const char **filename_ptr,
-                          const char **functionname_ptr)
+aarch64_elf_find_function (bfd *          abfd,
+                          asymbol **     symbols,
+                          asection *     section,
+                          bfd_vma        offset,
+                          const char **  filename_ptr,
+                          const char **  functionname_ptr)
 {
   const char *filename = NULL;
   asymbol *func = NULL;
   bfd_vma low_func = 0;
   asymbol **p;
 
+  if (symbols == NULL)
+    return FALSE;
+
+  if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
+    return FALSE;
+
   for (p = symbols; *p != NULL; p++)
     {
       elf_symbol_type *q;