aboutsummaryrefslogtreecommitdiff
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 13:24:09 -0500
commitbcdaad21d4635931d1bd3b54a7894276925d081d (patch)
tree283d6b7b18006862bbac9ac711834b70dabd629f /dlfcn
parent5770c0ad1e0c784e817464ca2cf9436a58c9beb7 (diff)
downloadglibc-bcdaad21d4635931d1bd3b54a7894276925d081d.zip
glibc-bcdaad21d4635931d1bd3b54a7894276925d081d.tar.gz
glibc-bcdaad21d4635931d1bd3b54a7894276925d081d.tar.bz2
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 33574fa..96bf925 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;
+ }
}
}