Skip to content

Commit e3cd9db

Browse files
Michael SchwarczOren Cohen
authored andcommitted
TF-M patch: Fix tfm_memory_check issue (TF-M issue #224)
- Add Secure/non-secure code and secure heap to memory check - Link to bug tracking: https://developer.trustedfirmware.org/T224
1 parent fd50f96 commit e3cd9db

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
@@ -463,6 +463,8 @@ static uint32_t tfm_spm_partition_get_priority_ext(uint32_t partition_idx)
463463
/* Macros to pick linker symbols and allow references to sections in all level*/
464464
#define REGION_DECLARE_EXT(a, b, c) extern uint32_t REGION_NAME(a, b, c)
465465

466+
REGION_DECLARE_EXT(Image$$, ARM_LIB_HEAP, $$ZI$$Base);
467+
REGION_DECLARE_EXT(Image$$, ARM_LIB_HEAP, $$ZI$$Limit);
466468
REGION_DECLARE_EXT(Image$$, ER_TFM_DATA, $$ZI$$Base);
467469
REGION_DECLARE_EXT(Image$$, ER_TFM_DATA, $$ZI$$Limit);
468470
REGION_DECLARE_EXT(Image$$, ER_TFM_DATA, $$RW$$Base);
@@ -518,7 +520,19 @@ int32_t tfm_memory_check(void *buffer, size_t len, int32_t ns_caller)
518520
if (memory_check_range(buffer, len, base, limit) == IPC_SUCCESS) {
519521
return IPC_SUCCESS;
520522
}
523+
524+
base = (uintptr_t)NS_CODE_START;
525+
limit = (uintptr_t)(NS_CODE_START + NS_CODE_SIZE);
526+
if (memory_check_range(buffer, len, base, limit) == IPC_SUCCESS) {
527+
return IPC_SUCCESS;
528+
}
521529
} else {
530+
base = (uintptr_t)&REGION_NAME(Image$$, ARM_LIB_HEAP, $$ZI$$Base);
531+
limit = (uintptr_t)&REGION_NAME(Image$$, ARM_LIB_HEAP, $$ZI$$Limit);
532+
if (memory_check_range(buffer, len, base, limit) == IPC_SUCCESS) {
533+
return IPC_SUCCESS;
534+
}
535+
522536
base = (uintptr_t)&REGION_NAME(Image$$, ER_TFM_DATA, $$RW$$Base);
523537
limit = (uintptr_t)&REGION_NAME(Image$$, ER_TFM_DATA, $$RW$$Limit);
524538
if (memory_check_range(buffer, len, base, limit) == IPC_SUCCESS) {
@@ -543,6 +557,12 @@ int32_t tfm_memory_check(void *buffer, size_t len, int32_t ns_caller)
543557
if (memory_check_range(buffer, len, base, limit) == IPC_SUCCESS) {
544558
return IPC_SUCCESS;
545559
}
560+
561+
base = (uintptr_t)S_CODE_START;
562+
limit = (uintptr_t)(S_CODE_START + S_CODE_SIZE);
563+
if (memory_check_range(buffer, len, base, limit) == IPC_SUCCESS) {
564+
return IPC_SUCCESS;
565+
}
546566
}
547567

548568
return IPC_ERROR_MEMORY_CHECK;

0 commit comments

Comments
 (0)