]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[malloc] Report caller address as soon as memory corruption is detected
authorMichael Brown <mcb30@ipxe.org>
Mon, 15 Dec 2014 14:48:02 +0000 (14:48 +0000)
committerMichael Brown <mcb30@ipxe.org>
Mon, 15 Dec 2014 14:48:02 +0000 (14:48 +0000)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/core/malloc.c

index cd925e7c1fb4a8d3865714ca6e6c16f65c999db2..d9c07495d5dcd3f3d8c709fe68a117a6edfff14d 100644 (file)
@@ -517,6 +517,10 @@ void * realloc ( void *old_ptr, size_t new_size ) {
                VALGRIND_FREELIKE_BLOCK ( old_ptr, 0 );
        }
 
+       if ( ASSERTED ) {
+               DBGC ( &heap, "Possible memory corruption detected from %p\n",
+                      __builtin_return_address ( 0 ) );
+       }
        return new_ptr;
 }
 
@@ -530,7 +534,14 @@ void * realloc ( void *old_ptr, size_t new_size ) {
  * will be aligned to at least a multiple of sizeof(void*).
  */
 void * malloc ( size_t size ) {
-       return realloc ( NULL, size );
+       void *ptr;
+
+       ptr = realloc ( NULL, size );
+       if ( ASSERTED ) {
+               DBGC ( &heap, "Possible memory corruption detected from %p\n",
+                      __builtin_return_address ( 0 ) );
+       }
+       return ptr;
 }
 
 /**
@@ -544,7 +555,12 @@ void * malloc ( size_t size ) {
  * If @c ptr is NULL, no action is taken.
  */
 void free ( void *ptr ) {
+
        realloc ( ptr, 0 );
+       if ( ASSERTED ) {
+               DBGC ( &heap, "Possible memory corruption detected from %p\n",
+                      __builtin_return_address ( 0 ) );
+       }
 }
 
 /**
@@ -564,6 +580,10 @@ void * zalloc ( size_t size ) {
        data = malloc ( size );
        if ( data )
                memset ( data, 0, size );
+       if ( ASSERTED ) {
+               DBGC ( &heap, "Possible memory corruption detected from %p\n",
+                      __builtin_return_address ( 0 ) );
+       }
        return data;
 }