mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v2 00/11] KVM: x86: Fix emulation of (some) L2 instructions
@ 2025-02-01  1:55 Sean Christopherson
  2025-02-01  1:55 ` [PATCH v2 01/11] KVM: nVMX: Check PAUSE_EXITING, not BUS_LOCK_DETECTION, on PAUSE emulation Sean Christopherson
                   ` (11 more replies)
  0 siblings, 12 replies; 13+ messages in thread
From: Sean Christopherson @ 2025-02-01  1:55 UTC (permalink / raw)
  To: Sean Christopherson, Paolo Bonzini; +Cc: kvm, linux-kernel

Fix a variety of bugs related to emulating instructions on behalf of L2,
and (finally) add support for synthesizing nested VM-Exit to L1 when L1
wants to intercept an instruction (KVM currently injects a #UD into L2).

There's no real motivation behind this series.  I spotted the PAUSE_EXITING
vs. BUS_LOCK_DETECTION goof when sorting out a report/question about HLT
emulation in L2 doing weird things, and then stupidly thought "how hard can
it be to generate a VM-Exit?".  Turns out, not that hard, but definitely
a bit harder than I was anticipating due to the annoying RIP vs. next RIP
flaw.

Given that VMX has literally never done the right thing, and SVM was quite
broken since the beginning, I doubt anyone cares about this, but we have
the code, so why not...

Sean Christopherson (11):
  KVM: nVMX: Check PAUSE_EXITING, not BUS_LOCK_DETECTION, on PAUSE
    emulation
  KVM: nSVM: Pass next RIP, not current RIP, for nested VM-Exit on
    emulation
  KVM: nVMX: Allow emulating RDPID on behalf of L2
  KVM: nVMX: Emulate HLT in L2 if it's not intercepted
  KVM: nVMX: Consolidate missing X86EMUL_INTERCEPTED logic in L2
    emulation
  KVM: x86: Plumb the src/dst operand types through to
    .check_intercept()
  KVM: x86: Plumb the emulator's starting RIP into nested intercept
    checks
  KVM: x86: Add a #define for the architectural max instruction length
  KVM: nVMX: Allow the caller to provide instruction length on nested
    VM-Exit
  KVM: nVMX: Synthesize nested VM-Exit for supported emulation
    intercepts
  KVM: selftests: Add a nested (forced) emulation intercept test for x86

 arch/x86/kvm/emulate.c                        |   5 +-
 arch/x86/kvm/kvm_emulate.h                    |   7 +-
 arch/x86/kvm/trace.h                          |  14 +-
 arch/x86/kvm/vmx/nested.c                     |  14 +-
 arch/x86/kvm/vmx/nested.h                     |  22 ++-
 arch/x86/kvm/vmx/vmx.c                        | 102 ++++++++----
 tools/testing/selftests/kvm/Makefile.kvm      |   1 +
 .../selftests/kvm/x86/nested_emulation_test.c | 146 ++++++++++++++++++
 8 files changed, 265 insertions(+), 46 deletions(-)
 create mode 100644 tools/testing/selftests/kvm/x86/nested_emulation_test.c


base-commit: eb723766b1030a23c38adf2348b7c3d1409d11f0
-- 
2.48.1.362.g079036d154-goog


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2025-02-28 17:06 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-02-01  1:55 [PATCH v2 00/11] KVM: x86: Fix emulation of (some) L2 instructions Sean Christopherson
2025-02-01  1:55 ` [PATCH v2 01/11] KVM: nVMX: Check PAUSE_EXITING, not BUS_LOCK_DETECTION, on PAUSE emulation Sean Christopherson
2025-02-01  1:55 ` [PATCH v2 02/11] KVM: nSVM: Pass next RIP, not current RIP, for nested VM-Exit on emulation Sean Christopherson
2025-02-01  1:55 ` [PATCH v2 03/11] KVM: nVMX: Allow emulating RDPID on behalf of L2 Sean Christopherson
2025-02-01  1:55 ` [PATCH v2 04/11] KVM: nVMX: Emulate HLT in L2 if it's not intercepted Sean Christopherson
2025-02-01  1:55 ` [PATCH v2 05/11] KVM: nVMX: Consolidate missing X86EMUL_INTERCEPTED logic in L2 emulation Sean Christopherson
2025-02-01  1:55 ` [PATCH v2 06/11] KVM: x86: Plumb the src/dst operand types through to .check_intercept() Sean Christopherson
2025-02-01  1:55 ` [PATCH v2 07/11] KVM: x86: Plumb the emulator's starting RIP into nested intercept checks Sean Christopherson
2025-02-01  1:55 ` [PATCH v2 08/11] KVM: x86: Add a #define for the architectural max instruction length Sean Christopherson
2025-02-01  1:55 ` [PATCH v2 09/11] KVM: nVMX: Allow the caller to provide instruction length on nested VM-Exit Sean Christopherson
2025-02-01  1:55 ` [PATCH v2 10/11] KVM: nVMX: Synthesize nested VM-Exit for supported emulation intercepts Sean Christopherson
2025-02-01  1:55 ` [PATCH v2 11/11] KVM: selftests: Add a nested (forced) emulation intercept test for x86 Sean Christopherson
2025-02-28 17:06 ` [PATCH v2 00/11] KVM: x86: Fix emulation of (some) L2 instructions Sean Christopherson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®