From dff2a99d84a756792f65d31fa19becce792f2ca5 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Tue, 4 Mar 2014 00:04:27 +0100 Subject: [PATCH] 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 --- libdw/ChangeLog | 6 ++++++ libdw/dwarf_begin_elf.c | 7 ++++--- 2 files changed, 10 insertions(+), 3 deletions(-) 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); -- 2.47.2