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 <osandov@fb.com>
This commit is contained in:
Omar Sandoval
2019-08-05 03:40:05 -07:00
committed by Mark Wielaard
parent 1b1433d567
commit d37f6ea7e3
2 changed files with 6 additions and 0 deletions
+5
View File
@@ -1,3 +1,8 @@
2019-08-05 Omar Sandoval <osandov@fb.com>
* dwfl_segment_report_module.c (dwfl_segment_report_module): Assign
mod->main.fd.
2019-04-28 Mark Wielaard <mark@klomp.org>
* frame_unwind.c (expr_eval): Make sure we left shift a unsigned
+1
View File
@@ -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;