aboutsummaryrefslogtreecommitdiff
path: root/lib/xlat_tables
diff options
context:
space:
mode:
authorAntonio Nino Diaz <antonio.ninodiaz@arm.com>2018-10-08 16:11:11 +0100
committerAntonio Nino Diaz <antonio.ninodiaz@arm.com>2018-10-08 16:15:21 +0100
commita5fa5658e846ee00338dd90c2959b460e9aa54e6 (patch)
tree6b78519dfe336dbbdd9cd4b860fea48d5e48472a /lib/xlat_tables
parent5634a493e7182d0f8abd184a7fe23d0182545b84 (diff)
downloadtrusted-firmware-a-a5fa5658e846ee00338dd90c2959b460e9aa54e6.tar.gz
xlat: Fix checks in mmap_add() and mmap_add_ctx()
Commit 79621f0038b789de23ecc8891024f7cf6aa65999 broke sgi575. It is possible to have a region with 0 as value for the attributes. It means device memory, read only, secure, executable. This is legitimate if the code is in flash and the code is executed from there. This is the case for SGI_MAP_FLASH0_RO, defined in the file plat/arm/css/sgi/sgi_plat.c. This problem is solved by checking both size and attributes in xlat v1. In xlat v2, it is enough to check the granularity, as it can never be 0. Change-Id: I7be11f1b0e51c4c2ffd560b4a6cdfbf15de2c276 Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
Diffstat (limited to 'lib/xlat_tables')
-rw-r--r--lib/xlat_tables/xlat_tables_common.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/xlat_tables/xlat_tables_common.c b/lib/xlat_tables/xlat_tables_common.c
index a9aaeee8d4..2ee77c7aeb 100644
--- a/lib/xlat_tables/xlat_tables_common.c
+++ b/lib/xlat_tables/xlat_tables_common.c
@@ -176,7 +176,7 @@ void mmap_add(const mmap_region_t *mm)
{
const mmap_region_t *mm_cursor = mm;
- while (mm_cursor->attr != 0U) {
+ while ((mm_cursor->size != 0U) || (mm_cursor->attr != 0U)) {
mmap_add_region(mm_cursor->base_pa, mm_cursor->base_va,
mm_cursor->size, mm_cursor->attr);
mm_cursor++;