about summary refs log tree commit diff
path: root/elf/dl-close.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2020-01-16 06:45:36 -0800
committerH.J. Lu <hjl.tools@gmail.com>2020-01-16 07:41:53 -0800
commit5177d85b0c050a2333a0c4165c938dd422013d05 (patch)
tree533626a2adbf4ce776a29919150d21d1b5925126 /elf/dl-close.c
parent791a08cf378db8cc99baa8c63746c9d2885e7f9a (diff)
downloadglibc-5177d85b0c050a2333a0c4165c938dd422013d05.tar.gz
glibc-5177d85b0c050a2333a0c4165c938dd422013d05.tar.xz
glibc-5177d85b0c050a2333a0c4165c938dd422013d05.zip
Clear GL(dl_initfirst) when freeing its link_map memory [BZ# 25396]
We should clear GL(dl_initfirst) when freeing its link_map memory.

Tested on Fedora 31/x86-64 with CET.

Reviewed-by: Florian Weimer <fweimer@redhat.com>
Diffstat (limited to 'elf/dl-close.c')
-rw-r--r--elf/dl-close.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/elf/dl-close.c b/elf/dl-close.c
index 104c299209..73b2817bbf 100644
--- a/elf/dl-close.c
+++ b/elf/dl-close.c
@@ -756,6 +756,10 @@ _dl_close_worker (struct link_map *map, bool force)
 	  if (imap->l_runpath_dirs.dirs != (void *) -1)
 	    free (imap->l_runpath_dirs.dirs);
 
+	  /* Clear GL(dl_initfirst) when freeing its link_map memory.  */
+	  if (imap == GL(dl_initfirst))
+	    GL(dl_initfirst) = NULL;
+
 	  free (imap);
 	}
     }