[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:
Hui Su
2026-08-20 09:48:13 +08:00
committed by Rbb666
parent 991f0ffca6
commit 8234a3614e
+1
View File
@@ -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 */