|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging-4.20] xen/rangeset: Fix rangeset_remove_range() with e == ~0UL
commit 6d0261509837644fc7dedea1b0bdbd0c311fc44e
Author: Stefano Stabellini <stefano.stabellini@xxxxxxx>
AuthorDate: Thu Oct 29 13:33:11 2026 +0100
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Thu Oct 29 13:33:11 2026 +0100
xen/rangeset: Fix rangeset_remove_range() with e == ~0UL
When the removal spans several ranges, the last one is trimmed by
setting its start to e + 1, and destroyed if that leaves it empty. For
e == ~0UL, e + 1 wraps to 0, so the range is kept as [0, end] and the
removal adds everything below it.
This is hit by pv_shim_shutdown(), whose iomem_deny_access(d, 0, ~0UL)
on resume turns the guest's grant frame permissions into [0, highest
grant frame]. arch_iommu_hwdom_init() can hit it too, for a PVH
hardware domain with an E820 entry above its 48-bit iomem_caps.
Destroy the range when it ends within [s, e] instead.
Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxx>
Acked-by: Roger Pau Monné <roger@xxxxxxxxxxxxxx>
master commit: 4e3c0eeac5761c505f8229e82d265eb29957ca5c
master date: 2026-10-23 17:26:14 -0700
---
xen/common/rangeset.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/xen/common/rangeset.c b/xen/common/rangeset.c
index e758710390..cb9dcf4863 100644
--- a/xen/common/rangeset.c
+++ b/xen/common/rangeset.c
@@ -239,9 +239,10 @@ int rangeset_remove_range(
destroy_range(r, t);
}
- x->s = e + 1;
- if ( x->s > x->e )
+ if ( x->e <= e )
destroy_range(r, x);
+ else
+ x->s = e + 1;
}
out:
--
generated by git-patchbot for /home/xen/git/xen.git#staging-4.20
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |