From: Adalbert Lazar <alazar@xxxxxxxxxxxxxxx> Inform the guest introspection tool that the exception (from a previous KVMI_INJECT_EXCEPTION command) was not successfully injected. It can happen for the tool to queue a pagefault but have it overwritten by an interrupt picked up during guest reentry. kvmi_trap_event() is used to inform the tool of all pending traps giving it a chance to determine if it should try again later. Signed-off-by: Mihai Donțu <mdontu@xxxxxxxxxxxxxxx> --- arch/x86/kvm/x86.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 9a3c315b13e4..b3825658528a 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -7058,6 +7058,15 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu) goto cancel_injection; } + if (kvmi_lost_exception(vcpu)) { + local_irq_enable(); + preempt_enable(); + vcpu->srcu_idx = srcu_read_lock(&vcpu->kvm->srcu); + r = 1; + kvmi_trap_event(vcpu); + goto cancel_injection; + } + kvm_load_guest_xcr0(vcpu); if (req_immediate_exit) {