[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250201015518.689704-1-seanjc@google.com>
Date: Fri, 31 Jan 2025 17:55:07 -0800
From: Sean Christopherson <seanjc@...gle.com>
To: Sean Christopherson <seanjc@...gle.com>, Paolo Bonzini <pbonzini@...hat.com>
Cc: kvm@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: [PATCH v2 00/11] KVM: x86: Fix emulation of (some) L2 instructions
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
Powered by blists - more mailing lists