From: Sean Christopherson <seanjc@google.com>
To: Sean Christopherson <seanjc@google.com>,
Paolo Bonzini <pbonzini@redhat.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
Marc Orr <marcorr@google.com>, Ben Gardon <bgardon@google.com>,
Venkatesh Srinivas <venkateshs@chromium.org>
Subject: [PATCH 6/6] KVM: VMX: Intercept reads to invalid and write-only x2APIC registers
Date: Sat, 7 Jan 2023 01:10:25 +0000 [thread overview]
Message-ID: <20230107011025.565472-7-seanjc@google.com> (raw)
In-Reply-To: <20230107011025.565472-1-seanjc@google.com>
Intercept reads to invalid (non-existent) and write-only x2APIC registers
when configuring VMX's MSR bitmaps for x2APIC+APICv. When APICv is fully
enabled, Intel hardware doesn't validate the registers on RDMSR and
instead blindly retrieves data from the vAPIC page, i.e. it's software's
responsibility to intercept reads to non-existent and write-only MSRs.
Fixes: 8d14695f9542 ("x86, apicv: add virtual x2apic support")
Signed-off-by: Sean Christopherson <seanjc@google.com>
---
arch/x86/kvm/vmx/vmx.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
index 82c61c16f8f5..1be2bc7185be 100644
--- a/arch/x86/kvm/vmx/vmx.c
+++ b/arch/x86/kvm/vmx/vmx.c
@@ -4031,7 +4031,7 @@ static void vmx_update_msr_bitmap_x2apic(struct kvm_vcpu *vcpu)
u64 *msr_bitmap = (u64 *)vmx->vmcs01.msr_bitmap;
u8 mode;
- if (!cpu_has_vmx_msr_bitmap())
+ if (!cpu_has_vmx_msr_bitmap() || WARN_ON_ONCE(!lapic_in_kernel(vcpu)))
return;
if (cpu_has_secondary_exec_ctrls() &&
@@ -4053,11 +4053,11 @@ static void vmx_update_msr_bitmap_x2apic(struct kvm_vcpu *vcpu)
* Reset the bitmap for MSRs 0x800 - 0x83f. Leave AMD's uber-extended
* registers (0x840 and above) intercepted, KVM doesn't support them.
* Intercept all writes by default and poke holes as needed. Pass
- * through all reads by default in x2APIC+APICv mode, as all registers
- * except the current timer count are passed through for read.
+ * through reads for all valid registers by default in x2APIC+APICv
+ * mode, only the current timer count needs on-demand emulation by KVM.
*/
if (mode & MSR_BITMAP_MODE_X2APIC_APICV)
- msr_bitmap[read_idx] = 0;
+ msr_bitmap[read_idx] = ~kvm_lapic_readable_reg_mask(vcpu->arch.apic);
else
msr_bitmap[read_idx] = ~0ull;
msr_bitmap[write_idx] = ~0ull;
--
2.39.0.314.g84b9a713c41-goog
next prev parent reply other threads:[~2023-01-07 1:11 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-07 1:10 [PATCH 0/6] KVM: x86: x2APIC reserved bits/regs fixes Sean Christopherson
2023-01-07 1:10 ` [PATCH 1/6] KVM: x86: Inject #GP if WRMSR sets reserved bits in APIC Self-IPI Sean Christopherson
2023-01-08 16:40 ` Maxim Levitsky
2023-01-07 1:10 ` [PATCH 2/6] KVM: x86: Inject #GP on x2APIC WRMSR that sets reserved bits 63:32 Sean Christopherson
2023-01-08 16:41 ` Maxim Levitsky
2023-01-07 1:10 ` [PATCH 3/6] KVM: x86: Mark x2APIC DFR reg as non-existent for x2APIC Sean Christopherson
2023-01-08 16:43 ` Maxim Levitsky
2023-01-07 1:10 ` [PATCH 4/6] KVM: x86: Split out logic to generate "readable" APIC regs mask to helper Sean Christopherson
2023-01-08 17:38 ` Maxim Levitsky
2023-01-07 1:10 ` [PATCH 5/6] KVM: VMX: Always intercept accesses to unsupported "extended" x2APIC regs Sean Christopherson
2023-01-08 18:07 ` Maxim Levitsky
2023-01-09 16:32 ` Sean Christopherson
2023-01-09 17:25 ` Jim Mattson
2023-01-07 1:10 ` Sean Christopherson [this message]
2023-01-08 18:09 ` [PATCH 6/6] KVM: VMX: Intercept reads to invalid and write-only x2APIC registers Maxim Levitsky
2023-01-13 18:06 ` [PATCH 0/6] KVM: x86: x2APIC reserved bits/regs fixes Paolo Bonzini
2023-01-13 18:41 ` Sean Christopherson
2023-01-20 0:19 ` Sean Christopherson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230107011025.565472-7-seanjc@google.com \
--to=seanjc@google.com \
--cc=bgardon@google.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marcorr@google.com \
--cc=pbonzini@redhat.com \
--cc=venkateshs@chromium.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox