From 41e336cd09ee3d0b235519a62989c114c0f3e3b4 Mon Sep 17 00:00:00 2001
From: Kent McLeod <Kent.Mcleod@data61.csiro.au>
Date: Mon, 4 Feb 2019 10:51:42 +1100
Subject: [PATCH] arm: Assert that device regions don't overlap

The assert has an assumption that regions are also ordered in ascending
order.
---
 src/arch/arm/kernel/boot.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/arch/arm/kernel/boot.c b/src/arch/arm/kernel/boot.c
index 9a1bd071e..14e740efa 100644
--- a/src/arch/arm/kernel/boot.c
+++ b/src/arch/arm/kernel/boot.c
@@ -198,7 +198,14 @@ create_untypeds(cap_t root_cnode_cap, region_t boot_mem_reuse_reg)
 
     slot_pos_before = ndks_boot.slot_pos_cur;
     create_kernel_untypeds(root_cnode_cap, boot_mem_reuse_reg, slot_pos_before);
+    UNUSED paddr_t current_region_pos = 0;
     for (i = 0; i < get_num_dev_p_regs(); i++) {
+        /* It is required that untyped regions are non-overlapping.
+         * We assume that hardware regions are defined in ascending order to make
+         * overlapping checks simpler
+         */
+        assert(get_dev_p_reg(i).start >= current_region_pos);
+        current_region_pos = get_dev_p_reg(i).end;
         dev_reg = paddr_to_pptr_reg(get_dev_p_reg(i));
         if (!create_untypeds_for_region(root_cnode_cap, true,
                                         dev_reg, slot_pos_before)) {
-- 
GitLab