diff --git a/arch/arm/cortex-m33/iar/TZ/secure/los_secure_context.c b/arch/arm/cortex-m33/iar/TZ/secure/los_secure_context.c index db9a4f9a37da75ff23656749fd4cf200f5df8237..7220107bea3b0400a9f9411ad7666a1aeca323e4 100644 --- a/arch/arm/cortex-m33/iar/TZ/secure/los_secure_context.c +++ b/arch/arm/cortex-m33/iar/TZ/secure/los_secure_context.c @@ -74,6 +74,16 @@ OS_CMSE_NS_ENTRY OsSecureContext *HalSecureContextAlloc(UINT32 size) OS_CMSE_NS_ENTRY VOID HalSecureContextFree(OsSecureContext *secureContext) { + if (secureContext == NULL) { + return; + } + + SecureHeapInfo heapInfo = HalGetSecureHeapInfo(); + if (secureContext < heapInfo.start || + (secureContext + sizeof(OsSecureContext)) > (heapInfo.start + heapInfo.size)) { + return; + } + UINT32 ipsr; OS_IPSR_READ(ipsr); diff --git a/arch/arm/cortex-m33/iar/TZ/secure/los_secure_heap.c b/arch/arm/cortex-m33/iar/TZ/secure/los_secure_heap.c index 7f0077e005f986e8bb2b5eb18b3485b3ea08fc96..78e2267d3ed1a60bfa05abdf991b43a130baac14 100644 --- a/arch/arm/cortex-m33/iar/TZ/secure/los_secure_heap.c +++ b/arch/arm/cortex-m33/iar/TZ/secure/los_secure_heap.c @@ -228,3 +228,10 @@ OS_CMSE_NS_ENTRY VOID HalSecureFree(VOID *ptr) OsSecureHeapFreeNode(node); } +OS_CMSE_NS_ENTRY SecureHeapInfo HalGetSecureHeapInfo(void) +{ + SecureHeapInfo info; + info.start = g_secureHeap; + info.size = LOSCFG_SECURE_HEAP_SIZE; + return info; +} \ No newline at end of file diff --git a/arch/arm/cortex-m33/iar/TZ/secure/los_secure_heap.h b/arch/arm/cortex-m33/iar/TZ/secure/los_secure_heap.h index d3ee1aadb87303dc9ebb12d159c179142925d625..2548a6e860b262535e86313e07a17fe7bc49a342 100644 --- a/arch/arm/cortex-m33/iar/TZ/secure/los_secure_heap.h +++ b/arch/arm/cortex-m33/iar/TZ/secure/los_secure_heap.h @@ -40,6 +40,12 @@ extern "C" { #endif /* __cplusplus */ #endif /* __cplusplus */ +typedef struct { + UINT8 *start; + UINT32 size; +} SecureHeapInfo; + +OS_CMSE_NS_ENTRY SecureHeapInfo HalGetSecureHeapInfo(void); VOID *HalSecureMalloc(UINT32 size); VOID HalSecureFree(VOID *ptr);