[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