]> git.itanic.dy.fi Git - linux-stable/commitdiff
KVM MMU: check pending exception before injecting APF
authorHaozhong Zhang <haozhong.zhang@intel.com>
Wed, 10 Jan 2018 13:44:42 +0000 (21:44 +0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 11 Jan 2018 13:05:19 +0000 (14:05 +0100)
For example, when two APF's for page ready happen after one exit and
the first one becomes pending, the second one will result in #DF.
Instead, just handle the second page fault synchronously.

Reported-by: Ross Zwisler <zwisler@gmail.com>
Message-ID: <CAOxpaSUBf8QoOZQ1p4KfUp0jq76OKfGY4Uxs-Gg8ngReD99xww@mail.gmail.com>
Reported-by: Alec Blayne <ab@tevsa.net>
Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/mmu.c

index c4deb1f34faa6ce7ffe6bcaaebddc3e87b2a9a69..e577bacd4bd06be2265d2ab06a353fc365e87a22 100644 (file)
@@ -3781,7 +3781,8 @@ static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu, gva_t gva, gfn_t gfn)
 bool kvm_can_do_async_pf(struct kvm_vcpu *vcpu)
 {
        if (unlikely(!lapic_in_kernel(vcpu) ||
-                    kvm_event_needs_reinjection(vcpu)))
+                    kvm_event_needs_reinjection(vcpu) ||
+                    vcpu->arch.exception.pending))
                return false;
 
        if (!vcpu->arch.apf.delivery_as_pf_vmexit && is_guest_mode(vcpu))