[PATCH 09/11] KVM: arm64: CCA: Prevent memslot modifications after Realm creation
Steven Price
steven.price at arm.com
Mon Nov 2 06:13:00 PST 2026
From: Suzuki K Poulose <suzuki.poulose at arm.com>
Once the Realm is created, prevent any changes to guest_memfd backed
memslots, as the private memory is provided by slots backed by gmem.
This will also be validated when we handle a fault for Realm Stage2 (in
a later commit).
Additionally, similar to pKVM, we do not support dirty logging or
read-only memslots.
Signed-off-by: Suzuki K Poulose <suzuki.poulose at arm.com>
Signed-off-by: Steven Price <steven.price at arm.com>
---
arch/arm64/kvm/mmu.c | 21 ++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c
index 51fda7b2ff7f..eb8c5f9e9791 100644
--- a/arch/arm64/kvm/mmu.c
+++ b/arch/arm64/kvm/mmu.c
@@ -2862,13 +2862,28 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm,
(new->flags & (KVM_MEM_LOG_DIRTY_PAGES | KVM_MEM_READONLY)))
return -EPERM;
- if (kvm->arch.vm_flavor == VM_PROTECTED_PKVM) {
+ switch (kvm->arch.vm_flavor) {
+ case VM_PROTECTED_PKVM:
/* Cannot modify memslots once a pVM has run. */
if (pkvm_hyp_vm_is_created(kvm) &&
- (change == KVM_MR_DELETE || change == KVM_MR_MOVE)) {
+ (change == KVM_MR_DELETE || change == KVM_MR_MOVE))
return -EPERM;
- }
+ break;
+ case VM_REALM:
+ /*
+ * Once the Realm is created, we cannot modify any slots that
+ * could be providing private memory. i.e., guest_memfd backed
+ * slots.
+ * TODO: Handle trusted device private memory slots
+ */
+ if (!kvm_realm_is_created(kvm))
+ break;
+ if (kvm_slot_has_gmem(old) || kvm_slot_has_gmem(new))
+ return -EPERM;
+ break;
+ default:
+ break;
}
if (change != KVM_MR_CREATE && change != KVM_MR_MOVE &&
--
2.43.0
More information about the linux-arm-kernel
mailing list