Patch "KVM: x86: Fail emulation during EMULTYPE_SKIP on any exception" has been added to the 5.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    KVM: x86: Fail emulation during EMULTYPE_SKIP on any exception

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     kvm-x86-fail-emulation-during-emultype_skip-on-any-e.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit a8491afa5799db9528d9c8e46436955944d4a2a5
Author: Sean Christopherson <seanjc@xxxxxxxxxx>
Date:   Fri Sep 30 23:36:32 2022 +0000

    KVM: x86: Fail emulation during EMULTYPE_SKIP on any exception
    
    [ Upstream commit 17122c06b86c9f77f45b86b8e62c3ed440847a59 ]
    
    Treat any exception during instruction decode for EMULTYPE_SKIP as a
    "full" emulation failure, i.e. signal failure instead of queuing the
    exception.  When decoding purely to skip an instruction, KVM and/or the
    CPU has already done some amount of emulation that cannot be unwound,
    e.g. on an EPT misconfig VM-Exit KVM has already processeed the emulated
    MMIO.  KVM already does this if a #UD is encountered, but not for other
    exceptions, e.g. if a #PF is encountered during fetch.
    
    In SVM's soft-injection use case, queueing the exception is particularly
    problematic as queueing exceptions while injecting events can put KVM
    into an infinite loop due to bailing from VM-Enter to service the newly
    pending exception.  E.g. multiple warnings to detect such behavior fire:
    
      ------------[ cut here ]------------
      WARNING: CPU: 3 PID: 1017 at arch/x86/kvm/x86.c:9873 kvm_arch_vcpu_ioctl_run+0x1de5/0x20a0 [kvm]
      Modules linked in: kvm_amd ccp kvm irqbypass
      CPU: 3 PID: 1017 Comm: svm_nested_soft Not tainted 6.0.0-rc1+ #220
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
      RIP: 0010:kvm_arch_vcpu_ioctl_run+0x1de5/0x20a0 [kvm]
      Call Trace:
       kvm_vcpu_ioctl+0x223/0x6d0 [kvm]
       __x64_sys_ioctl+0x85/0xc0
       do_syscall_64+0x2b/0x50
       entry_SYSCALL_64_after_hwframe+0x46/0xb0
      ---[ end trace 0000000000000000 ]---
      ------------[ cut here ]------------
      WARNING: CPU: 3 PID: 1017 at arch/x86/kvm/x86.c:9987 kvm_arch_vcpu_ioctl_run+0x12a3/0x20a0 [kvm]
      Modules linked in: kvm_amd ccp kvm irqbypass
      CPU: 3 PID: 1017 Comm: svm_nested_soft Tainted: G        W          6.0.0-rc1+ #220
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
      RIP: 0010:kvm_arch_vcpu_ioctl_run+0x12a3/0x20a0 [kvm]
      Call Trace:
       kvm_vcpu_ioctl+0x223/0x6d0 [kvm]
       __x64_sys_ioctl+0x85/0xc0
       do_syscall_64+0x2b/0x50
       entry_SYSCALL_64_after_hwframe+0x46/0xb0
      ---[ end trace 0000000000000000 ]---
    
    Fixes: 6ea6e84309ca ("KVM: x86: inject exceptions produced by x86_decode_insn")
    Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20220930233632.1725475-1-seanjc@xxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index cf37a61729972..f5e9590a8f311 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -6787,7 +6787,9 @@ int x86_emulate_instruction(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa,
 						  write_fault_to_spt,
 						  emulation_type))
 				return 1;
-			if (ctxt->have_exception) {
+
+			if (ctxt->have_exception &&
+			    !(emulation_type & EMULTYPE_SKIP)) {
 				/*
 				 * #UD should result in just EMULATION_FAILED, and trap-like
 				 * exception should not be encountered during decode.



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux