From: Jan Kratochvil Date: Mon, 3 Mar 2014 23:04:27 +0000 (+0100) Subject: Fix abort() on missing section headers. X-Git-Tag: elfutils-0.159~33 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=dff2a99d84a756792f65d31fa19becce792f2ca5;p=thirdparty%2Felfutils.git Fix abort() on missing section headers. libdw/ 2014-03-03 Jan Kratochvil Fix abort() on missing section headers. * dwarf_begin_elf.c (check_section): Replace abort call by goto err. New label err to return NULL. Signed-off-by: Jan Kratochvil --- diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 19a2a505c..1d9b9a3b1 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,9 @@ +2014-03-03 Jan Kratochvil + + Fix abort() on missing section headers. + * dwarf_begin_elf.c (check_section): Replace abort call by goto err. + New label err to return NULL. + 2014-02-05 Josh Stone * dwarf_decl_file.c (dwarf_decl_file): Read the idx as unsigned. diff --git a/libdw/dwarf_begin_elf.c b/libdw/dwarf_begin_elf.c index 6cf3aa178..79daeacb6 100644 --- a/libdw/dwarf_begin_elf.c +++ b/libdw/dwarf_begin_elf.c @@ -187,9 +187,9 @@ check_section (Dwarf *result, GElf_Ehdr *ehdr, Elf_Scn *scn, bool inscngrp) /* Get the section header data. */ shdr = gelf_getshdr (scn, &shdr_mem); if (shdr == NULL) - /* This should never happen. If it does something is - wrong in the libelf library. */ - abort (); + /* We may read /proc/PID/mem with only program headers mapped and section + headers out of the mapped pages. */ + goto err; /* Ignore any SHT_NOBITS sections. Debugging sections should not have been stripped, but in case of a corrupt file we won't try @@ -215,6 +215,7 @@ check_section (Dwarf *result, GElf_Ehdr *ehdr, Elf_Scn *scn, bool inscngrp) { /* The section name must be valid. Otherwise is the ELF file invalid. */ + err: __libdw_free_zdata (result); Dwarf_Sig8_Hash_free (&result->sig8_hash); __libdw_seterrno (DWARF_E_INVALID_ELF);