Skip to content

Commit 2bd58a7

Browse files
committed
secureshield: check shared memory in vmpu init
Signed-off-by: Yiping Peng <[email protected]>
1 parent c21fc39 commit 2bd58a7

File tree

3 files changed

+41
-4
lines changed

3 files changed

+41
-4
lines changed

example/baremetal/secureshield/secret_normal/container_cfg.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@
3737
static CONTAINER_AC_TABLE g_container1_act[] = {
3838
{init_secret, 0, SECURESHIELD_AC_INTERFACE},
3939
{operate_secret, 3, SECURESHIELD_AC_INTERFACE},
40-
{(void *)CONTAINER_12_SHARED_ORIGIN, CONTAINER_12_SHARED_LENGTH, SECURESHIELD_ACDEF_URAM}
40+
{(void *)CONTAINER_12_SHARED_ORIGIN, CONTAINER_12_SHARED_LENGTH, SECURESHIELD_ACDEF_URAM + SECURESHIELD_AC_SHARED}
4141
};
4242

4343
// Container 2: special memory regions for communication with container 2
4444
static CONTAINER_AC_TABLE g_container2_act[] = {
45-
{(void *)CONTAINER_12_SHARED_ORIGIN, CONTAINER_12_SHARED_LENGTH, SECURESHIELD_ACDEF_URAM},
45+
{(void *)CONTAINER_12_SHARED_ORIGIN, CONTAINER_12_SHARED_LENGTH, SECURESHIELD_ACDEF_URAM + SECURESHIELD_AC_SHARED},
4646
{trusted_ops, 0, SECURESHIELD_AC_INTERFACE}
4747
};
4848

example/freertos/kernel_secure/container_cfg.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@
3737
static CONTAINER_AC_TABLE g_container1_act[] = {
3838
{init_secret, 0, SECURESHIELD_AC_INTERFACE},
3939
{operate_secret, 3, SECURESHIELD_AC_INTERFACE},
40-
{(void *)CONTAINER_12_SHARED_ORIGIN, CONTAINER_12_SHARED_LENGTH, SECURESHIELD_ACDEF_URAM}
40+
{(void *)CONTAINER_12_SHARED_ORIGIN, CONTAINER_12_SHARED_LENGTH, SECURESHIELD_ACDEF_URAM + SECURESHIELD_AC_SHARED}
4141
};
4242

4343
// Container 2: one special memory region for communication with container 2
4444
static CONTAINER_AC_TABLE g_container2_act[] = {
45-
{(void *)CONTAINER_12_SHARED_ORIGIN, CONTAINER_12_SHARED_LENGTH, SECURESHIELD_ACDEF_URAM},
45+
{(void *)CONTAINER_12_SHARED_ORIGIN, CONTAINER_12_SHARED_LENGTH, SECURESHIELD_ACDEF_URAM + SECURESHIELD_AC_SHARED},
4646
{trusted_ops, 0, SECURESHIELD_AC_INTERFACE}
4747
};
4848

library/secureshield/core/src/secureshield_vmpu_arc.c

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,38 @@ static const MPU_REGION* vmpu_fault_find_region(uint32_t fault_addr)
169169
}
170170
}
171171

172+
/**
173+
* \brief mpu region address check
174+
* \details search all mpu regions to check if the region address is confict with that
175+
* allow shared memory
176+
* \return 0 no confict, 1 exist conflict
177+
*/
178+
static uint32_t mem_region_checks(uint32_t start, uint32_t end, CONTAINER_AC ac)
179+
{
180+
const MPU_REGION *region;
181+
uint32_t base, size;
182+
183+
#if ARC_FEATURE_MPU_BUILD_S == 1 && SECURESHIELD_USE_MPU_SID == 1
184+
if (ac & SECURESHIELD_AC_SHARED)
185+
SECURESHIELD_HALT("Secureshield does not support shared memory when SID is enabled!");
186+
#endif
187+
188+
for (uint32_t i = 0; i < g_mpu_region_count; i++) {
189+
region = &g_mpu_list[i];
190+
base = region->base;
191+
size = region->size;
192+
193+
if (((start >= base) && (start < (base + size))) ||
194+
((end >= base) && (end < (base + size))) ||
195+
((start < base) && (end >= (base + size)))) {
196+
if (!((region->ac & SECURESHIELD_AC_SHARED) &&
197+
(ac & SECURESHIELD_AC_SHARED)))
198+
return 1;
199+
}
200+
}
201+
return 0;
202+
}
203+
172204
/**
173205
* \brief get the bits according to size
174206
* \param[in] size
@@ -560,6 +592,11 @@ void vmpu_ac_mem(uint8_t container_id, void* addr, uint32_t size, CONTAINER_AC a
560592
return ;
561593
}
562594

595+
if (mem_region_checks((uint32_t)addr, (uint32_t)addr + size - 1, ac)) {
596+
SECURESHIELD_HALT("vmpu_ac_mem memory region address error, check the configuration\n");
597+
return ;
598+
}
599+
563600
/* assign container region pointer */
564601
container = &g_mpu_container[container_id];
565602
if (!container->region) {

0 commit comments

Comments
 (0)