]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
KVM: arm64: Don't leak stage-2 page-table if VM fails to init under pKVM
authorWill Deacon <will@kernel.org>
Mon, 30 Mar 2026 14:48:03 +0000 (15:48 +0100)
committerMarc Zyngier <maz@kernel.org>
Mon, 30 Mar 2026 15:58:07 +0000 (16:58 +0100)
If pkvm_init_host_vm() fails, we should free the stage-2 page-table
previously allocated by kvm_init_stage2_mmu().

Cc: Fuad Tabba <tabba@google.com>
Reviewed-by: Fuad Tabba <tabba@google.com>
Tested-by: Fuad Tabba <tabba@google.com>
Tested-by: Mostafa Saleh <smostafa@google.com>
Fixes: 07aeb70707b1 ("KVM: arm64: Reserve pKVM handle during pkvm_init_host_vm()")
Signed-off-by: Will Deacon <will@kernel.org>
Link: https://patch.msgid.link/20260330144841.26181-3-will@kernel.org
Signed-off-by: Marc Zyngier <maz@kernel.org>
arch/arm64/kvm/arm.c

index 410ffd41fd73aadfbdedd8892dfb2f0534416605..3589fc08266cfaadfb101fb120a303a1481677dd 100644 (file)
@@ -236,7 +236,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
                 */
                ret = pkvm_init_host_vm(kvm);
                if (ret)
-                       goto err_free_cpumask;
+                       goto err_uninit_mmu;
        }
 
        kvm_vgic_early_init(kvm);
@@ -252,6 +252,8 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
 
        return 0;
 
+err_uninit_mmu:
+       kvm_uninit_stage2_mmu(kvm);
 err_free_cpumask:
        free_cpumask_var(kvm->arch.supported_cpus);
 err_unshare_kvm: