PR26239, memory leak in _bfd_dwarf2_slurp_debug_info

Message ID 20200715101726.GL31072@bubble.grove.modra.org
State New
Headers show
Series
  • PR26239, memory leak in _bfd_dwarf2_slurp_debug_info
Related show

Commit Message

David Faust via Binutils July 15, 2020, 10:17 a.m.
PR 26239
	* coffgen.c (_bfd_coff_close_and_cleanup): Free dwarf2 info.


-- 
Alan Modra
Australia Development Lab, IBM

Patch

diff --git a/bfd/coffgen.c b/bfd/coffgen.c
index d49b2ff201..b496da9d62 100644
--- a/bfd/coffgen.c
+++ b/bfd/coffgen.c
@@ -3141,16 +3141,22 @@  bfd_coff_group_name (bfd *abfd, const asection *sec)
 bfd_boolean
 _bfd_coff_close_and_cleanup (bfd *abfd)
 {
-  if (abfd->format == bfd_object
-      && bfd_family_coff (abfd)
-      && coff_data (abfd) != NULL)
+  struct coff_tdata *tdata = coff_data (abfd);
+
+  if (tdata != NULL)
     {
       /* PR 25447:
 	 Do not clear the keep_syms and keep_strings flags.
 	 These may have been set by pe_ILF_build_a_bfd() indicating
 	 that the syms and strings pointers are not to be freed.  */
-      if (!_bfd_coff_free_symbols (abfd))
+      if (bfd_get_format (abfd) == bfd_object
+	  && bfd_family_coff (abfd)
+	  && !_bfd_coff_free_symbols (abfd))
 	return FALSE;
+
+      if (bfd_get_format (abfd) == bfd_object
+	  || bfd_get_format (abfd) == bfd_core)
+	_bfd_dwarf2_cleanup_debug_info (abfd, &tdata->dwarf2_find_line_info);
     }
   return _bfd_generic_close_and_cleanup (abfd);
 }