about summary refs log tree commit diff
path: root/dlfcn
diff options
context:
space:
mode:
authorDJ Delorie <dj@delorie.com>2018-11-20 13:24:09 -0500
committerDJ Delorie <dj@delorie.com>2018-11-20 14:01:18 -0500
commit481a6cf0c24f02f251d7cd0b776c12d00e6b144f (patch)
tree9c46bb1ee655ce0cccd1096053471a2cee5f8ab4 /dlfcn
parent2c7078bfb9cc426433ac08d951e24c29c01b5f7d (diff)
downloadglibc-481a6cf0c24f02f251d7cd0b776c12d00e6b144f.tar.gz
glibc-481a6cf0c24f02f251d7cd0b776c12d00e6b144f.tar.xz
glibc-481a6cf0c24f02f251d7cd0b776c12d00e6b144f.zip
malloc: tcache double free check
* malloc/malloc.c (tcache_entry): Add key field.
(tcache_put): Set it.
(tcache_get): Likewise.
(_int_free): Check for double free in tcache.
* malloc/tst-tcfree1.c: New.
* malloc/tst-tcfree2.c: New.
* malloc/Makefile: Run the new tests.
* manual/probes.texi: Document memory_tcache_double_free probe.

* dlfcn/dlerror.c (check_free): Prevent double frees.
Diffstat (limited to 'dlfcn')
-rw-r--r--dlfcn/dlerror.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/dlfcn/dlerror.c b/dlfcn/dlerror.c
index 33574faab6..96bf925333 100644
--- a/dlfcn/dlerror.c
+++ b/dlfcn/dlerror.c
@@ -198,7 +198,10 @@ check_free (struct dl_action_result *rec)
       Dl_info info;
       if (_dl_addr (check_free, &info, &map, NULL) != 0 && map->l_ns == 0)
 #endif
-	free ((char *) rec->errstring);
+	{
+	  free ((char *) rec->errstring);
+	  rec->errstring = NULL;
+	}
     }
 }