]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
_bfd_elf_munmap_section_contents
authorAlan Modra <amodra@gmail.com>
Sun, 12 Jan 2025 04:03:33 +0000 (14:33 +1030)
committerAlan Modra <amodra@gmail.com>
Sun, 19 Jan 2025 20:43:46 +0000 (07:13 +1030)
Do unmap/free cached contents to avoid some memory leaks we'd
otherwise see.

* elf.c (_bfd_elf_munmap_section_contents): Clear pointers to
contents that we unmap/free rather than not unmapping/freeing.

bfd/elf.c

index 1f2b82bfe92066e5f4314a89f08d677a3ac626e7..1aecb4786a25adf4a8ac4389528c54200ef837a4 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -14270,15 +14270,15 @@ _bfd_elf_munmap_section_contents (asection *sec ATTRIBUTE_UNUSED,
   if (contents == NULL)
     return;
 
+  /* Don't leave pointers to data we are about to munmap or free.  */
+  if (sec->contents == contents)
+    sec->contents = NULL;
+  if (elf_section_data (sec)->this_hdr.contents == contents)
+    elf_section_data (sec)->this_hdr.contents = NULL;
+
 #ifdef USE_MMAP
   if (sec->mmapped_p)
     {
-      /* _bfd_elf_mmap_section_contents may return the previously
-        mapped section contents.  Munmap the section contents only
-        if they haven't been cached.  */
-      if (elf_section_data (sec)->this_hdr.contents == contents)
-       return;
-
       /* When _bfd_elf_mmap_section_contents returns CONTENTS as
         malloced, CONTENTS_ADDR is set to NULL.  */
       if (elf_section_data (sec)->contents_addr != NULL)
@@ -14288,7 +14288,6 @@ _bfd_elf_munmap_section_contents (asection *sec ATTRIBUTE_UNUSED,
                      elf_section_data (sec)->contents_size) != 0)
            abort ();
          sec->mmapped_p = 0;
-         sec->contents = NULL;
          elf_section_data (sec)->contents_addr = NULL;
          elf_section_data (sec)->contents_size = 0;
          return;