From: Omar Sandoval Date: Mon, 5 Aug 2019 10:40:05 +0000 (-0700) Subject: libdwfl: Fix fd leak/closing wrong fd after dwfl_core_file_report() X-Git-Tag: elfutils-0.177~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d37f6ea7e3e544e27b6067405a6b5ab0a31a99c8;p=thirdparty%2Felfutils.git libdwfl: Fix fd leak/closing wrong fd after dwfl_core_file_report() dwfl_segment_report_module() (used only by dwfl_core_file_report()) opens a file descriptor and/or an Elf handle, reports a module, and assigns mod->main.elf. However, it doesn't assign mod->main.fd, so it is left as 0. This causes two problems: 1. We leak the file descriptor for the module. 2. When we free the module, we close file descriptor 0 (stdin). Fix it by assigning mod->main.fd. Signed-off-by: Omar Sandoval --- diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 7c9a018b8..8cbe90c95 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2019-08-05 Omar Sandoval + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Assign + mod->main.fd. + 2019-04-28 Mark Wielaard * frame_unwind.c (expr_eval): Make sure we left shift a unsigned diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index 76ba15068..430e13d57 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -967,6 +967,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, { /* Install the file in the module. */ mod->main.elf = elf; + mod->main.fd = fd; elf = NULL; fd = -1; mod->main.vaddr = module_start - bias;