[PATCH 2/4] Revert "KVM: arm64: vgic-its: Don't save collections the table cannot hold"
From: Fuad Tabba
Date: Wed Aug 19 2026 - 06:36:30 EST
This reverts commit 9b10fb74e4b661543d188701bd4d024fc5c18f58.
Freeing the collections when GITS_BASER<coll> changes removes the state
this check rejected: vgic_its_cmd_handle_mapi(),
vgic_its_cmd_handle_mapc() and vgic_its_restore_cte() all validate the
ID against the current table before allocating, and the table can no
longer change under the list. What remains is a collection whose entry
is not backed by a memslot, which the write fails on anyway, so the
check costs a save userspace should be able to issue reliably and buys
nothing.
The reverted commit credited the check with bounding the walk as well.
It stays bounded without it: collection IDs are unique and each is below
the table's capacity, so the list cannot be longer than the table.
Suggested-by: Marc Zyngier <maz@xxxxxxxxxx>
Link: https://lore.kernel.org/all/87ecg9owwa.wl-maz@xxxxxxxxxx/
Signed-off-by: Fuad Tabba <fuad.tabba@xxxxxxxxx>
---
arch/arm64/kvm/vgic/vgic-its.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/arch/arm64/kvm/vgic/vgic-its.c b/arch/arm64/kvm/vgic/vgic-its.c
index 3339d9977af27..cc6ea5c3409ae 100644
--- a/arch/arm64/kvm/vgic/vgic-its.c
+++ b/arch/arm64/kvm/vgic/vgic-its.c
@@ -2535,9 +2535,6 @@ static int vgic_its_save_collection_table(struct vgic_its *its)
max_size = GITS_BASER_NR_PAGES(baser) * SZ_64K;
list_for_each_entry(collection, &its->collection_list, coll_list) {
- if (!vgic_its_check_id(its, baser, collection->collection_id, NULL))
- return -EINVAL;
-
ret = vgic_its_save_cte(its, collection, gpa);
if (ret)
return ret;
--
2.39.5