summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Wielaard <[email protected]>2013-09-12 16:49:25 +0200
committerMark Wielaard <[email protected]>2013-09-12 16:50:33 +0200
commitead7d1916789f1576550502d4bcf2a0f1d247463 (patch)
tree15a5dd7a452c805e2b564d54c66fc77685193d16
parent18b2c67fa2a422c744efba0d4c9a8cb9ef423823 (diff)
libdwfl: Fix memory leak in cu.c on bad DWARF.
If libdw dwarf_offdie fails free cu structure. Signed-off-by: Mark Wielaard <[email protected]>
-rw-r--r--libdwfl/ChangeLog4
-rw-r--r--libdwfl/cu.c5
2 files changed, 8 insertions, 1 deletions
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
index d325475a..4d119fd9 100644
--- a/libdwfl/ChangeLog
+++ b/libdwfl/ChangeLog
@@ -1,5 +1,9 @@
2013-09-12 Mark Wielaard <[email protected]>
+ * cu.c (intern_cu): If dwarf_offdie fails free cu.
+
+2013-09-12 Mark Wielaard <[email protected]>
+
* linux-proc-maps.c (proc_maps_report): Don't fclose FILE in
bad_report.
diff --git a/libdwfl/cu.c b/libdwfl/cu.c
index 18fc2060..40b0201c 100644
--- a/libdwfl/cu.c
+++ b/libdwfl/cu.c
@@ -204,7 +204,10 @@ intern_cu (Dwfl_Module *mod, Dwarf_Off cuoff, struct dwfl_cu **result)
/* XXX use non-searching lookup */
Dwarf_Die *die = INTUSE(dwarf_offdie) (mod->dw, cuoff, &cu->die);
if (die == NULL)
- return DWFL_E_LIBDW;
+ {
+ free (cu);
+ return DWFL_E_LIBDW;
+ }
assert (die == &cu->die);
struct dwfl_cu **newvec = realloc (mod->cu, ((mod->ncu + 1)