From 23d9210daf21236e659569f2ebc9f83d080b4c72 Mon Sep 17 00:00:00 2001 From: wangfei_chen Date: Thu, 12 Sep 2024 16:27:04 +0800 Subject: [PATCH] Add configVALIDATE_HEAP_BLOCK_POINTER on heap_5 heap_5 is used for multiple separated memory spaces. In the previous implementation, it only verifies the highest and lowest addresses. A pointer may not be within heap regions, but is still located between the highest and lowest addressed. Add maco configVALIDATE_HEAP_BLOCK_POINTER to provide customized heap block pointers detection based on the settings of heap regions. Signed-off-by: wangfei_chen --- portable/MemMang/heap_5.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/portable/MemMang/heap_5.c b/portable/MemMang/heap_5.c index fccf798256..d4b5626582 100644 --- a/portable/MemMang/heap_5.c +++ b/portable/MemMang/heap_5.c @@ -129,12 +129,19 @@ * heapVALIDATE_BLOCK_POINTER assert. */ #define heapPROTECT_BLOCK_POINTER( pxBlock ) ( ( BlockLink_t * ) ( ( ( portPOINTER_SIZE_TYPE ) ( pxBlock ) ) ^ xHeapCanary ) ) -/* Assert that a heap block pointer is within the heap bounds. */ - #define heapVALIDATE_BLOCK_POINTER( pxBlock ) \ - configASSERT( ( pucHeapHighAddress != NULL ) && \ - ( pucHeapLowAddress != NULL ) && \ - ( ( uint8_t * ) ( pxBlock ) >= pucHeapLowAddress ) && \ - ( ( uint8_t * ) ( pxBlock ) < pucHeapHighAddress ) ) +/* Assert that a heap block pointer is within the heap bounds. + * Setting configVALIDATE_HEAP_BLOCK_POINTER to 1 enables customized heap block pointers + * protection on heap_5. */ + #ifndef configVALIDATE_HEAP_BLOCK_POINTER + #define heapVALIDATE_BLOCK_POINTER( pxBlock ) \ + configASSERT( ( pucHeapHighAddress != NULL ) && \ + ( pucHeapLowAddress != NULL ) && \ + ( ( uint8_t * ) ( pxBlock ) >= pucHeapLowAddress ) && \ + ( ( uint8_t * ) ( pxBlock ) < pucHeapHighAddress ) ) + #else /* ifndef configVALIDATE_HEAP_BLOCK_POINTER */ + #define heapVALIDATE_BLOCK_POINTER( pxBlock ) \ + configVALIDATE_HEAP_BLOCK_POINTER( pxBlock ) + #endif /* configVALIDATE_HEAP_BLOCK_POINTER */ #else /* if ( configENABLE_HEAP_PROTECTOR == 1 ) */