On Mon, 03 Mar 2014 17:05:39 +0100, Mark Wielaard wrote:
> On Sun, 2014-03-02 at 22:35 +0100, Jan Kratochvil wrote:
> > 2014-03-02  Jan Kratochvil  <[email protected]>
> > 
> >     Fix abort() on missing section headers.
> >     * dwarf_begin_elf.c (check_section): Replace abort call by goto err.
> >     New label err to return NULL.
> 
> Looks good.

Checked in.


Jan
--- Begin Message ---
libdw/
2014-03-03  Jan Kratochvil  <[email protected]>

        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 <[email protected]>
---
 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 19a2a50..1d9b9a3 100644
--- a/libdw/ChangeLog
+++ b/libdw/ChangeLog
@@ -1,3 +1,9 @@
+2014-03-03  Jan Kratochvil  <[email protected]>
+
+       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  <[email protected]>
 
        * 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 6cf3aa1..79daeac 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);
-- 
1.8.5.3

--- End Message ---

Reply via email to