From: David Woodhouse <dwmw2@infradead.org>
To: Sean Christopherson <seanjc@google.com>,
Paolo Bonzini <pbonzini@redhat.com>, Paul Durrant <paul@xen.org>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
syzbot+cdeaeec70992eca2d920@syzkaller.appspotmail.com,
Joao Martins <joao.m.martins@oracle.com>
Subject: Re: [PATCH 1/5] KVM: x86/xen: Restrict hypercall MSR to unofficial synthetic range
Date: Wed, 05 Feb 2025 09:27:26 +0000 [thread overview]
Message-ID: <43f702b383fb99d435f2cdb8ef35cc1449fe6c23.camel@infradead.org> (raw)
In-Reply-To: <20250201011400.669483-2-seanjc@google.com>
[-- Attachment #1: Type: text/plain, Size: 1762 bytes --]
On Fri, 2025-01-31 at 17:13 -0800, Sean Christopherson wrote:
> --- a/arch/x86/kvm/xen.c
> +++ b/arch/x86/kvm/xen.c
> @@ -1324,6 +1324,14 @@ int kvm_xen_hvm_config(struct kvm *kvm, struct kvm_xen_hvm_config *xhc)
> xhc->blob_size_32 || xhc->blob_size_64))
> return -EINVAL;
>
> + /*
> + * Restrict the MSR to the range that is unofficially reserved for
> + * synthetic, virtualization-defined MSRs, e.g. to prevent confusing
> + * KVM by colliding with a real MSR that requires special handling.
> + */
> + if (xhc->msr && (xhc->msr < 0x40000000 || xhc->msr > 0x4fffffff))
> + return -EINVAL;
> +
> mutex_lock(&kvm->arch.xen.xen_lock);
>
> if (xhc->msr && !kvm->arch.xen_hvm_config.msr)
I'd prefer to see #defines for those magic values. Especially as there
is a corresponding requirement that they never be set from host context
(which is where the potential locking issues come in). Which train of
thought leads me to ponder this as an alternative (or additional)
solution:
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -3733,7 +3733,13 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
u32 msr = msr_info->index;
u64 data = msr_info->data;
- if (msr && msr == vcpu->kvm->arch.xen_hvm_config.msr)
+ /*
+ * Do not allow host-initiated writes to trigger the Xen hypercall
+ * page setup; it could incur locking paths which are not expected
+ * if userspace sets the MSR in an unusual location.
+ */
+ if (msr && msr == vcpu->kvm->arch.xen_hvm_config.msr &&
+ !msr_info->host_initiated)
return kvm_xen_write_hypercall_page(vcpu, data);
switch (msr) {
[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 5069 bytes --]
next prev parent reply other threads:[~2025-02-05 9:27 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-01 1:13 [PATCH 0/5] KVM: x86/xen: Restrict hypercall MSR index Sean Christopherson
2025-02-01 1:13 ` [PATCH 1/5] KVM: x86/xen: Restrict hypercall MSR to unofficial synthetic range Sean Christopherson
2025-02-03 9:09 ` Paul Durrant
2025-02-05 9:27 ` David Woodhouse [this message]
2025-02-05 15:06 ` Sean Christopherson
2025-02-05 15:26 ` David Woodhouse
2025-02-05 15:51 ` Sean Christopherson
2025-02-05 16:18 ` David Woodhouse
2025-02-05 17:15 ` David Woodhouse
2025-02-05 19:20 ` Sean Christopherson
2025-02-06 18:58 ` David Woodhouse
2025-02-07 17:18 ` Sean Christopherson
2025-02-06 9:18 ` David Woodhouse
2026-04-28 14:54 ` David Woodhouse
2025-02-06 16:51 ` David Woodhouse
2025-02-01 1:13 ` [PATCH 2/5] KVM: x86/xen: Add an #ifdef'd helper to detect writes to Xen MSR Sean Christopherson
2025-02-03 9:09 ` Paul Durrant
2025-02-06 16:28 ` David Woodhouse
2025-02-01 1:13 ` [PATCH 3/5] KVM: x86/xen: Consult kvm_xen_enabled when checking for Xen MSR writes Sean Christopherson
2025-02-03 9:15 ` Paul Durrant
2025-02-06 16:29 ` David Woodhouse
2025-02-01 1:13 ` [PATCH 4/5] KVM: x86/xen: Bury xen_hvm_config behind CONFIG_KVM_XEN=y Sean Christopherson
2025-02-03 9:19 ` Paul Durrant
2025-02-06 16:30 ` David Woodhouse
2025-02-01 1:14 ` [PATCH 5/5] KVM: x86/xen: Move kvm_xen_hvm_config field into kvm_xen Sean Christopherson
2025-02-03 9:21 ` Paul Durrant
2025-02-06 16:32 ` David Woodhouse
2025-02-06 19:14 ` [PATCH] KVM: x86/xen: Only write Xen hypercall page for guest writes to MSR David Woodhouse
2025-02-15 0:50 ` 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=43f702b383fb99d435f2cdb8ef35cc1449fe6c23.camel@infradead.org \
--to=dwmw2@infradead.org \
--cc=joao.m.martins@oracle.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=paul@xen.org \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=syzbot+cdeaeec70992eca2d920@syzkaller.appspotmail.com \
/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
all inboxes | Powered by JetHome®