]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
malloc: Check for large bin list corruption when inserting unsorted chunk
authorAdam Maris <amaris@redhat.com>
Thu, 14 Mar 2019 20:51:16 +0000 (16:51 -0400)
committerDJ Delorie <dj@redhat.com>
Thu, 14 Mar 2019 20:51:16 +0000 (16:51 -0400)
Fixes bug 24216. This patch adds security checks for bk and bk_nextsize pointers
of chunks in large bin when inserting chunk from unsorted bin. It was possible
to write the pointer to victim (newly inserted chunk) to arbitrary memory
locations if bk or bk_nextsize pointers of the next large bin chunk
got corrupted.

malloc/malloc.c

index 6e766d11bc85b6480fa5c9f2a76559f8acf9deb5..801ba1f499b566e677b763fc84f8ba86f4f7ccd0 100644 (file)
@@ -3876,10 +3876,14 @@ _int_malloc (mstate av, size_t bytes)
                         {
                           victim->fd_nextsize = fwd;
                           victim->bk_nextsize = fwd->bk_nextsize;
+                          if (__glibc_unlikely (fwd->bk_nextsize->fd_nextsize != fwd))
+                            malloc_printerr ("malloc(): largebin double linked list corrupted (nextsize)");
                           fwd->bk_nextsize = victim;
                           victim->bk_nextsize->fd_nextsize = victim;
                         }
                       bck = fwd->bk;
+                      if (bck->fd != fwd)
+                        malloc_printerr ("malloc(): largebin double linked list corrupted (bk)");
                     }
                 }
               else