(_int_free): Add a few more cheap tests for corruption.
authordrepper <drepper>
Fri, 19 Nov 2004 21:22:47 +0000 (21:22 +0000)
committerdrepper <drepper>
Fri, 19 Nov 2004 21:22:47 +0000 (21:22 +0000)
malloc/malloc.c

index 5707410..ca7c7e5 100644 (file)
@@ -4233,6 +4233,15 @@ _int_free(mstate av, Void_t* mem)
 #endif
       ) {
 
+    if (__builtin_expect (chunksize (chunk_at_offset (p, size)) <= 2 * SIZE_SZ,
+                         0)
+       || __builtin_expect (chunksize (chunk_at_offset (p, size))
+                            >= av->system_mem, 0))
+      {
+       errstr = "invalid next size (fast)";
+       goto errout;
+      }
+
     set_fastchunks(av);
     fb = &(av->fastbins[fastbin_index(size)]);
     /* Another simple check: make sure the top of the bin is not the
@@ -4276,7 +4285,12 @@ _int_free(mstate av, Void_t* mem)
       }
 
     nextsize = chunksize(nextchunk);
-    assert(nextsize > 0);
+    if (__builtin_expect (nextsize <= 2 * SIZE_SZ, 0)
+       || __builtin_expect (nextsize >= av->system_mem, 0))
+      {
+       errstr = "invalid next size (normal)";
+       goto errout;
+      }
 
     /* consolidate backward */
     if (!prev_inuse(p)) {