mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-09-22 19:44:24 +08:00
[kernel/memheap] fix: stop invalid frees from corrupting heap
RT_ASSERT() does not stop execution when RT_DEBUGING_ASSERT is disabled. Return after the existing block validation so a sequential duplicate free cannot update heap accounting or the free list in release builds. Before fix: memheap double-free used: before=64 alloc=224 free=64 after=4294959232 Validation: scons -C bsp/qemu-vexpress-a9 -j$(nproc) Signed-off-by: Hui Su <3164683437@qq.com>
This commit is contained in:
@@ -619,6 +619,7 @@ void rt_memheap_free(void *ptr)
|
||||
RT_ASSERT(header_ptr->magic == (RT_MEMHEAP_MAGIC | RT_MEMHEAP_USED));
|
||||
/* check whether this block of memory has been over-written. */
|
||||
RT_ASSERT((header_ptr->next->magic & RT_MEMHEAP_MASK) == RT_MEMHEAP_MAGIC);
|
||||
return;
|
||||
}
|
||||
|
||||
/* get pool ptr */
|
||||
|
||||
Reference in New Issue
Block a user