diff options
author | Kinsey Moore <kinsey.moore@oarcorp.com> | 2021-10-25 09:50:12 -0500 |
---|---|---|
committer | Joel Sherrill <joel@rtems.org> | 2021-11-01 08:39:00 -0500 |
commit | 55a93ae3b427a37ad77cd72d0f02f5bd1bf6be25 (patch) | |
tree | 83f9f805051d0c962790f3f66efd69268e2124e6 | |
parent | aarch64: Break out MMU definitions (diff) | |
download | rtems-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.h | 9 |
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 ); |