summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKinsey Moore <kinsey.moore@oarcorp.com>2021-10-25 09:50:12 -0500
committerJoel Sherrill <joel@rtems.org>2021-11-01 08:39:00 -0500
commit55a93ae3b427a37ad77cd72d0f02f5bd1bf6be25 (patch)
tree83f9f805051d0c962790f3f66efd69268e2124e6
parentaarch64: Break out MMU definitions (diff)
downloadrtems-55a93ae3b427a37ad77cd72d0f02f5bd1bf6be25.tar.bz2
bsps/aarch64: Add missing MMU map recursion check
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.
-rw-r--r--bsps/aarch64/include/bsp/aarch64-mmu.h9
1 files changed, 9 insertions, 0 deletions
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 );