From 9a6cc49b44b458c2ce4cac36ea6c411d06850ac5 Mon Sep 17 00:00:00 2001 From: Michal Orzel Date: Wed, 7 Oct 2026 15:58:48 +0200 Subject: [PATCH] xen/arm: Fix under-mapping in map_range_to_domain() If the memory region to be mapped does not start at the page boundary and its end spans over the page boundary, map_range_to_domain() passes a number of pages that is short by one to map_regions_p2mt(). Domain's attempt to access memory within that page will fail. Fix it by calculating the number of pages to be mapped taking into account the start offset. Fixes: 88c10b0d6eee ("arch/arm: let map_mmio_regions() use start and count") Signed-off-by: Michal Orzel Acked-by: Julien Grall --- xen/arch/arm/device.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xen/arch/arm/device.c b/xen/arch/arm/device.c index b11366d722..ad50838b9f 100644 --- a/xen/arch/arm/device.c +++ b/xen/arch/arm/device.c @@ -89,7 +89,7 @@ int __overlay_init map_range_to_domain(const struct dt_device_node *dev, { res = map_regions_p2mt(d, gaddr_to_gfn(addr), - PFN_UP(len), + PFN_UP(addr + len) - PFN_DOWN(addr), maddr_to_mfn(addr), mr_data->p2mt);