xlat: Change check in mmap_add and mmap_add_ctx()
authorDaniel Boulby <daniel.boulby@arm.com>
Tue, 28 Aug 2018 16:44:48 +0000 (17:44 +0100)
committerAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Wed, 3 Oct 2018 10:47:30 +0000 (11:47 +0100)
Depending on the build flags it is possible that some of the memory
regions mapped in page table setup could have a size of 0. In this
case we simply want to do nothing but still wish to map the other
regions in the array. Therefore we cannot only use size == 0 as
the termination logic for the loop.

Since an attributes field with value 0 means that the region is
device memory, read only, secure and executable. Device memory
can't be executable, so this combination should never be used
and it is safe to use as a terminator value.

Therefore by changing the termination logic to use attributes
instead of size we prevent terminating the loop when we don't
intend to.

Change-Id: I92fc7f689ab08543497be6be4896dace2ed7b66a
Signed-off-by: Daniel Boulby <daniel.boulby@arm.com>
lib/xlat_tables/xlat_tables_common.c
lib/xlat_tables_v2/xlat_tables_core.c

index ca67f2a091f09cf89c3ae982ec56c5c3416b01f8..a9aaeee8d487302d39139b100c62e1916c9ec37a 100644 (file)
@@ -176,7 +176,7 @@ void mmap_add(const mmap_region_t *mm)
 {
        const mmap_region_t *mm_cursor = mm;
 
-       while (mm_cursor->size != 0U) {
+       while (mm_cursor->attr != 0U) {
                mmap_add_region(mm_cursor->base_pa, mm_cursor->base_va,
                                mm_cursor->size, mm_cursor->attr);
                mm_cursor++;
index 003718e760289763fa93d4d2e117668d9d4fb8dc..d9837ff82e0f7467d226dbecdd95189eb0fe0cf4 100644 (file)
@@ -815,7 +815,7 @@ void mmap_add_ctx(xlat_ctx_t *ctx, const mmap_region_t *mm)
 {
        const mmap_region_t *mm_cursor = mm;
 
-       while (mm_cursor->size != 0U) {
+       while (mm_cursor->attr != 0U) {
                mmap_add_region_ctx(ctx, mm_cursor);
                mm_cursor++;
        }