[PATCH 4.14 012/195] KVM MMU: check pending exception before injecting APF

From: Greg Kroah-Hartman
Date: Thu Feb 15 2018 - 12:45:31 EST


4.14-stable review patch. If anyone has any objections, please let me know.

------------------

From: Haozhong Zhang <haozhong.zhang@xxxxxxxxx>

commit 2a266f23550be997d783f27e704b9b40c4010292 upstream.

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@xxxxxxxxx>
Message-ID: <CAOxpaSUBf8QoOZQ1p4KfUp0jq76OKfGY4Uxs-Gg8ngReD99xww@xxxxxxxxxxxxxx>
Reported-by: Alec Blayne <ab@xxxxxxxxx>
Signed-off-by: Haozhong Zhang <haozhong.zhang@xxxxxxxxx>
Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>
Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>

---
arch/x86/kvm/mmu.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -3784,7 +3784,8 @@ static int kvm_arch_setup_async_pf(struc
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))