Skip to content

Commit 7a2c7d7

Browse files
author
Michael Schwarcz
committed
TF-M patch: Fix tfm_memory_check issue (TF-M issue ARMmbed#224)
- Add Secure/non-secure code and secure heap to memory check - Link to bug tracking: https://developer.trustedfirmware.org/T224
1 parent 749faa6 commit 7a2c7d7

File tree

1 file changed

+20
-0
lines changed
  • components/TARGET_PSA/TARGET_TFM/COMPONENT_SPE/secure_fw/core/ipc

1 file changed

+20
-0
lines changed

components/TARGET_PSA/TARGET_TFM/COMPONENT_SPE/secure_fw/core/ipc/tfm_spm.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,8 @@ static uint32_t tfm_spm_partition_get_priority_ext(uint32_t partition_idx)
466466
/* Macros to pick linker symbols and allow references to sections in all level*/
467467
#define REGION_DECLARE_EXT(a, b, c) extern uint32_t REGION_NAME(a, b, c)
468468

469+
REGION_DECLARE_EXT(Image$$, ARM_LIB_HEAP, $$ZI$$Base);
470+
REGION_DECLARE_EXT(Image$$, ARM_LIB_HEAP, $$ZI$$Limit);
469471
REGION_DECLARE_EXT(Image$$, ER_TFM_DATA, $$ZI$$Base);
470472
REGION_DECLARE_EXT(Image$$, ER_TFM_DATA, $$ZI$$Limit);
471473
REGION_DECLARE_EXT(Image$$, ER_TFM_DATA, $$RW$$Base);
@@ -521,7 +523,19 @@ int32_t tfm_memory_check(void *buffer, size_t len, int32_t ns_caller)
521523
if (memory_check_range(buffer, len, base, limit) == IPC_SUCCESS) {
522524
return IPC_SUCCESS;
523525
}
526+
527+
base = (uintptr_t)NS_CODE_START;
528+
limit = (uintptr_t)(NS_CODE_START + NS_CODE_SIZE);
529+
if (memory_check_range(buffer, len, base, limit) == IPC_SUCCESS) {
530+
return IPC_SUCCESS;
531+
}
524532
} else {
533+
base = (uintptr_t)&REGION_NAME(Image$$, ARM_LIB_HEAP, $$ZI$$Base);
534+
limit = (uintptr_t)&REGION_NAME(Image$$, ARM_LIB_HEAP, $$ZI$$Limit);
535+
if (memory_check_range(buffer, len, base, limit) == IPC_SUCCESS) {
536+
return IPC_SUCCESS;
537+
}
538+
525539
base = (uintptr_t)&REGION_NAME(Image$$, ER_TFM_DATA, $$RW$$Base);
526540
limit = (uintptr_t)&REGION_NAME(Image$$, ER_TFM_DATA, $$RW$$Limit);
527541
if (memory_check_range(buffer, len, base, limit) == IPC_SUCCESS) {
@@ -546,6 +560,12 @@ int32_t tfm_memory_check(void *buffer, size_t len, int32_t ns_caller)
546560
if (memory_check_range(buffer, len, base, limit) == IPC_SUCCESS) {
547561
return IPC_SUCCESS;
548562
}
563+
564+
base = (uintptr_t)S_CODE_START;
565+
limit = (uintptr_t)(S_CODE_START + S_CODE_SIZE);
566+
if (memory_check_range(buffer, len, base, limit) == IPC_SUCCESS) {
567+
return IPC_SUCCESS;
568+
}
549569
}
550570

551571
return IPC_ERROR_MEMORY_CHECK;

0 commit comments

Comments
 (0)