[PATCH v1 5/8] bsps/aarch64: Add missing MMU map recursion check

Kinsey Moore kinsey.moore at oarcorp.com
Fri Oct 29 21:17:18 UTC 2021


Certain input parameters for MMU mapping operations could cause an
infinite recursion if block end boundaries didn't align to 4k. This
ensures that recursion descent does not exceed 2 levels and instead
rounds up to the nearest 4k block if necessary.
---
 bsps/aarch64/include/bsp/aarch64-mmu.h | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/bsps/aarch64/include/bsp/aarch64-mmu.h b/bsps/aarch64/include/bsp/aarch64-mmu.h
index 4f42d5b187..9926eb97f6 100644
--- a/bsps/aarch64/include/bsp/aarch64-mmu.h
+++ b/bsps/aarch64/include/bsp/aarch64-mmu.h
@@ -246,6 +246,15 @@ BSP_START_TEXT_SECTION static inline rtems_status_code aarch64_mmu_map_block(
       } else {
         /* block starts on a boundary, but is short */
         chunk_size = size;
+
+	/* it isn't possible to go beyond page table level 2 */
+	if ( page_flag ) {
+          /* no sub-table, apply block properties */
+          page_table[index] = addr | flags | page_flag;
+          size -= chunk_size;
+          addr += chunk_size;
+          continue;
+	}
       }
     } else {
       uintptr_t block_top = RTEMS_ALIGN_UP( addr, granularity );
-- 
2.30.2



More information about the devel mailing list