From 12bb660f69bc7d7bd4cab92621ee2d5b3963ab62 Mon Sep 17 00:00:00 2001 From: Patrick Williams Date: Sun, 28 Apr 2013 18:39:46 -0500 Subject: Enhance heap corruption detection. Change-Id: I25ec156fe3c9088d2de2254017407dbadd2fac31 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/4255 Reviewed-by: Daniel M. Crowell Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III --- src/kernel/heapmgr.C | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/kernel') diff --git a/src/kernel/heapmgr.C b/src/kernel/heapmgr.C index f790b9e46..5518a96f8 100644 --- a/src/kernel/heapmgr.C +++ b/src/kernel/heapmgr.C @@ -119,6 +119,7 @@ void* HeapManager::_allocate(size_t i_sz) g_smallheap_alloc_hw = g_smallheap_allocated; // test_pages(); #endif + crit_assert(chunk->free); chunk->free = false; return &chunk->next; } @@ -180,7 +181,7 @@ void* HeapManager::_reallocBig(void* i_ptr, size_t i_sz) break; } - bc = bc->next; + bc = (big_chunk_t*) (((uint64_t)bc->next) & 0x00000000FFFFFFFF); } return new_ptr; } @@ -196,6 +197,7 @@ void HeapManager::_free(void * i_ptr) __sync_sub_and_fetch(&g_smallheap_count,1); __sync_sub_and_fetch(&g_smallheap_allocated,bucketByteSize(chunk->bucket)); #endif + crit_assert(!chunk->free); push_bucket(chunk, chunk->bucket); } } @@ -531,7 +533,7 @@ void* HeapManager::_allocateBig(size_t i_sz) break; } } - bc = bc->next; + bc = (big_chunk_t*) (((uint64_t)bc->next) & 0x00000000FFFFFFFF); } if(!bc) { @@ -570,7 +572,7 @@ bool HeapManager::_freeBig(void* i_ptr) result = true; break; } - bc = bc->next; + bc = (big_chunk_t*) (((uint64_t)bc->next) & 0x00000000FFFFFFFF); } return result; } -- cgit v1.2.1