Prevent a seg-fault from objdup when disassembling binaries which do not contain a symbol table.

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.
This commit is contained in:
Adam Lackorzymski 2019-06-12 15:05:21 +01:00 committed by Nick Clifton
parent 9abca70219
commit 62e0492f57
3 changed files with 28 additions and 9 deletions

View 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

View 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;

View 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;