FAILED: patch "[PATCH] KVM: x86: avoid loading a vCPU after .vm_destroy was called" failed to apply to 5.4-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 6fcee03df6a1a3101a77344be37bb85c6142d56c Mon Sep 17 00:00:00 2001
From: Maxim Levitsky <[email protected]>
Date: Tue, 22 Mar 2022 19:24:42 +0200
Subject: [PATCH] KVM: x86: avoid loading a vCPU after .vm_destroy was called
This can cause various unexpected issues, since VM is partially destroyed at that point.
For example when AVIC is enabled, this causes avic_vcpu_load to access physical id page entry which is already freed by .vm_destroy.
Message-Id: <[email protected]>
arch/x86/kvm/x86.c +3 -7
@@ -11816,20 +11816,15 @@ static void kvm_unload_vcpu_mmu(struct kvm_vcpu *vcpu)vcpu_put (vcpu); } -static void kvm_free_vcpus (struct kvm *kvm) +static void kvm_unload_vcpu_mmus (struct kvm *kvm) {unsigned long i;struct kvm_vcpu *vcpu; -/* -* Unpin any mmu pages first. -*/ kvm_for_each_vcpu (i, vcpu, kvm) {kvm_clear_async_pf_completion_queue (vcpu);kvm_unload_vcpu_mmu (vcpu); } - -kvm_destroy_vcpus (kvm); }void kvm_arch_sync_events (struct kvm *kvm)
@@ -11935,11 +11930,12 @@ void kvm_arch_destroy_vm(struct kvm *kvm)__x86_set_memory_region (kvm,TSS_PRIVATE_MEMSLOT ,0 ,0 );mutex_unlock (&kvm->slots_lock); } +kvm_unload_vcpu_mmus (kvm);static_call_cond (kvm_x86_vm_destroy)(kvm);kvm_free_msr_filter (srcu_dereference_check (kvm->arch.msr_filter, &kvm->srcu,1 ));kvm_pic_destroy (kvm);kvm_ioapic_destroy (kvm); -kvm_free_vcpus (kvm); +kvm_destroy_vcpus (kvm);kvfree (rcu_dereference_check (kvm->arch.apic_map,1 ));kfree (srcu_dereference_check (kvm->arch.pmu_event_filter, &kvm->srcu,1 ));kvm_mmu_uninit_vm (kvm);