diff options
author | Florian Weimer <fweimer@redhat.com> | 2014-09-10 20:29:15 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2014-09-11 10:59:05 +0200 |
commit | 52ffbdf25a1100986f4ae27bb0febbe5a722ab25 (patch) | |
tree | ad376175049819a8a4927dd9e72cf77338d3da0e /malloc/malloc.c | |
parent | 984c0ea97f649c869130a1ff099098e2b6f70aad (diff) | |
download | glibc-52ffbdf25a1100986f4ae27bb0febbe5a722ab25.zip glibc-52ffbdf25a1100986f4ae27bb0febbe5a722ab25.tar.gz glibc-52ffbdf25a1100986f4ae27bb0febbe5a722ab25.tar.bz2 |
malloc: additional unlink hardening for non-small bins [BZ #17344]
Turn two asserts into a conditional call to malloc_printerr. The
memory locations are accessed later anyway, so the performance
impact is minor.
Diffstat (limited to 'malloc/malloc.c')
-rw-r--r-- | malloc/malloc.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/malloc/malloc.c b/malloc/malloc.c index 6ee3840..6cbe9f3 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -1418,8 +1418,10 @@ typedef struct malloc_chunk *mbinptr; BK->fd = FD; \ if (!in_smallbin_range (P->size) \ && __builtin_expect (P->fd_nextsize != NULL, 0)) { \ - assert (P->fd_nextsize->bk_nextsize == P); \ - assert (P->bk_nextsize->fd_nextsize == P); \ + if (__builtin_expect (P->fd_nextsize->bk_nextsize != P, 0) \ + || __builtin_expect (P->bk_nextsize->fd_nextsize != P, 0)) \ + malloc_printerr (check_action, \ + "corrupted double-linked list (not small)", P);\ if (FD->fd_nextsize == NULL) { \ if (P->fd_nextsize == P) \ FD->fd_nextsize = FD->bk_nextsize = FD; \ |