From: Mark Wielaard Date: Sat, 14 Dec 2013 14:02:56 +0000 (+0100) Subject: libdwfl: Fix various frame related memory leaks. X-Git-Tag: elfutils-0.158~38 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e6e6cc83ea27413facb310ce48bebb1579a47130;p=thirdparty%2Felfutils.git libdwfl: Fix various frame related memory leaks. The result of dwarf_cfi_addrframe should have been freed when done. Dwfl_Module cached the reloc_info and the eh_cfi it which also should have been released when disposing of the module. Reported-by: Masatake YAMATO Tested-by: Masatake YAMATO Signed-off-by: Mark Wielaard --- diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index ff38108e6..a9238d80f 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,10 @@ +2013-12-14 Mark Wielaard + + * dwfl_module.c (__libdwfl_module_free): Free mod->reloc_info if + allocated. Call dwarf_cfi_end on mod->eh_cfi if necessary. + * frame_unwind.c (handle_cfi): Free frame result from + dwarf_cfi_addrframe when done. + 2013-12-15 Jan Kratochvil unwinder: ppc and ppc64 diff --git a/libdwfl/dwfl_module.c b/libdwfl/dwfl_module.c index f914b3a39..bb167ab26 100644 --- a/libdwfl/dwfl_module.c +++ b/libdwfl/dwfl_module.c @@ -84,6 +84,12 @@ __libdwfl_module_free (Dwfl_Module *mod) if (mod->build_id_bits != NULL) free (mod->build_id_bits); + if (mod->reloc_info != NULL) + free (mod->reloc_info); + + if (mod->eh_cfi != NULL) + dwarf_cfi_end (mod->eh_cfi); + free (mod->name); free (mod); } diff --git a/libdwfl/frame_unwind.c b/libdwfl/frame_unwind.c index 2973f9559..630efcb6f 100644 --- a/libdwfl/frame_unwind.c +++ b/libdwfl/frame_unwind.c @@ -580,6 +580,7 @@ handle_cfi (Dwfl_Frame *state, Dwarf_Addr pc, Dwarf_CFI *cfi, Dwarf_Addr bias) else unwound->pc_state = DWFL_FRAME_STATE_PC_SET; } + free (frame); } void