1 #include "malloc_wrappers.h" 2 #include <stdint.h> 3 #include <assert.h> 4 #include <string.h> 5 6 static size_t alloc_count = 0; 7 8 /* Allocate memory and place check values before and after. */ 9 void* malloc_with_check(size_t size) 10 { 11 size_t size32 = (size + 3) / 4 + 3; 12 uint32_t *buf = malloc(size32 * sizeof(uint32_t)); 13 buf[0] = size32; 14 buf[1] = 0xDEADBEEF; 15 buf[size32 - 1] = 0xBADBAD; 16 return buf + 2; 17 } 18 19 /* Free memory allocated with malloc_with_check() and do the checks. */ 20 void free_with_check(void *mem) 21 { 22 uint32_t *buf = (uint32_t*)mem - 2; 23 assert(buf[1] == 0xDEADBEEF); 24 assert(buf[buf[0] - 1] == 0xBADBAD); 25 free(buf); 26 } 27 28 /* Track memory usage */ 29 void* counting_realloc(void *ptr, size_t size) 30 { 31 /* Don't allocate crazy amounts of RAM when fuzzing */ 32 if (size > 1000000) 33 return NULL; 34 35 if (!ptr && size) 36 alloc_count++; 37 38 return realloc(ptr, size); 39 } 40 41 void counting_free(void *ptr) 42 { 43 if (ptr) 44 { 45 assert(alloc_count > 0); 46 alloc_count--; 47 free(ptr); 48 } 49 } 50 51 size_t get_alloc_count() 52 { 53 return alloc_count; 54 } 55