diff options
author | Michael Brown <mcb30@ipxe.org> | 2014-12-15 14:48:02 +0000 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2014-12-15 14:48:02 +0000 |
commit | 35c5379760aa1fea5e38f7a78b090f92bb7813ee (patch) | |
tree | 4a826ddbcd87e5eac90baa2e7d7daa3d5b9a59e6 /src/core/malloc.c | |
parent | 7871666740ed3f595c47fc90b1318df9a3db5768 (diff) | |
download | ipxe-35c5379760aa1fea5e38f7a78b090f92bb7813ee.tar.gz |
[malloc] Report caller address as soon as memory corruption is detected
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/core/malloc.c')
-rw-r--r-- | src/core/malloc.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/core/malloc.c b/src/core/malloc.c index cd925e7c..d9c07495 100644 --- a/src/core/malloc.c +++ b/src/core/malloc.c @@ -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; } |