libdwfl: Don't install an Elf handle in a Dwfl_Module twice
authorMark Wielaard <mark@klomp.org>
Wed, 8 Dec 2021 22:44:34 +0000 (23:44 +0100)
committerMark Wielaard <mark@klomp.org>
Thu, 9 Dec 2021 18:34:19 +0000 (19:34 +0100)
dwfl_segment_report_module can be called with the same module
name, start and end address twice (probably because of a corrupt
core file). In that case don't override the main.elf handle if
it already exists.

https://sourceware.org/bugzilla/show_bug.cgi?id=28655

Signed-off-by: Mark Wielaard <mark@klomp.org>
libdwfl/ChangeLog
libdwfl/dwfl_segment_report_module.c

index 76e0899..1f593ac 100644 (file)
@@ -1,5 +1,10 @@
 2021-12-08  Mark Wielaard  <mark@klomp.org>
 
+       * dwfl_segment_report_module.c (dwfl_segment_report_module): Check
+       Dwfl_Module isn't associated with an Elf before installing it.
+
+2021-12-08  Mark Wielaard  <mark@klomp.org>
+
        * dwfl_segment_report_module.c (dwfl_segment_report_module): Don't
        trust e_shentsize.
 
index be0aff7..f4acfe5 100644 (file)
@@ -963,7 +963,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
        elf->flags |= ELF_F_MALLOCED;
     }
 
-  if (elf != NULL)
+  if (elf != NULL && mod->main.elf == NULL)
     {
       /* Install the file in the module.  */
       mod->main.elf = elf;