From: "Chen, Zide" <zide.chen@intel.com>
To: sashiko-reviews@lists.linux.dev
Cc: kvm@vger.kernel.org
Subject: Re: [PATCH v7 4/9] KVM: x86/pmu: Snapshot host IA32_PERF_CAPABILITIES in kvm_host
Date: Mon, 27 Jul 2026 18:16:49 -0500 [thread overview]
Message-ID: <f2a2588e-b198-4895-98f3-e907071a243a@intel.com> (raw)
In-Reply-To: <20260727194448.CD47F1F000E9@smtp.kernel.org>
On 7/27/2026 2:44 PM, sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
>
> Pre-existing issues:
> - [High] Incomplete replacement of raw MSR_IA32_PERF_CAPABILITIES read leaves KVM vulnerable to kernel panics during module initialization.
> --
>
> --- Patch [4]: [PATCH v7 4/9] KVM: x86/pmu: Snapshot host IA32_PERF_CAPABILITIES in kvm_host ---
> commit 6a6d946c1225761f83ef8a8498aa4ccab5425b72
> Author: Mingwei Zhang <mizhang@google.com>
>
> KVM: x86/pmu: Snapshot host IA32_PERF_CAPABILITIES in kvm_host
>
> Cache the unadulterated snapshot of perf_capabilities so that KVM can
> compare guest vPMU capabilities against raw hardware capabilities.
>
>> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
>> index 0626e835e9eb7..e0114f248a9ef 100644
>> --- a/arch/x86/kvm/x86.c
>> +++ b/arch/x86/kvm/x86.c
> [ ... ]
>> @@ -7033,6 +7033,10 @@ int kvm_x86_vendor_init(struct kvm_x86_init_ops *ops)
>> if (boot_cpu_has(X86_FEATURE_ARCH_CAPABILITIES))
>> rdmsrq(MSR_IA32_ARCH_CAPABILITIES, kvm_host.arch_capabilities);
>>
>> + if (boot_cpu_has(X86_FEATURE_PDCM))
>> + rdmsrq_safe(MSR_IA32_PERF_CAPABILITIES,
>> + &kvm_host.perf_capabilities);
>> +
>
> [Severity: High]
> This isn't a bug introduced by this patch, but there is an incomplete
> replacement of a raw MSR_IA32_PERF_CAPABILITIES read elsewhere that leaves
> KVM vulnerable to kernel panics during module initialization.
>
> If a nested hypervisor exposes CPUID.PDCM but faults on the MSR access, the
> raw rdmsrq() in intel_pmu_is_mediated_pmu_supported() can trigger a #GP and
> panic the kernel:
I don't think KVM needs to handle that case. In
intel_pmu_is_mediated_pmu_supported(), If CPUID.1:ECX.PDCM is advertised
in an Intel platform but reading IA32_PERF_CAPABILITIES causes a #GP,
that's a bug in the underlying hypervisor.
The reason I used rdmsrq_safe() here is that this code lives in common
x86 code. In theory, a non-Intel architecture could potentially
implement CPUID.1:ECX[15] without supporting IA32_PERF_CAPABILITIES.
rdmsrq_safe() is a defensive safeguard.
> arch/x86/kvm/vmx/pmu_intel.c:intel_pmu_is_mediated_pmu_supported() {
> ...
> rdmsrq(MSR_IA32_PERF_CAPABILITIES, host_perf_cap);
> ...
> }
>
> While this patch safely caches the MSR using rdmsrq_safe() here in
> kvm_x86_vendor_init(), this snapshot is populated after
> kvm_init_pmu_capability() has already run.
>
> Because of this ordering, intel_pmu_is_mediated_pmu_supported() cannot
> currently use this safely cached value, as it would incorrectly read 0.
>
> Would it make sense to reorder the initialization so the snapshot is
> populated before kvm_init_pmu_capability() runs, and then update
> intel_pmu_is_mediated_pmu_supported() to use kvm_host.perf_capabilities
> to avoid the #GP risk?
>
>> WARN_ON_ONCE(kvm_nr_uret_msrs);
>>
>> r = ops->hardware_setup();
>
next prev parent reply other threads:[~2026-07-27 23:16 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-27 19:21 [PATCH v7 0/9] KVM: x86/pmu: Add hardware Topdown metrics support Zide Chen
2026-07-27 19:21 ` [PATCH v7 1/9] KVM: x86/pmu: Do not map fixed counters >= 3 to generic perf events Zide Chen
2026-07-27 19:21 ` [PATCH v7 2/9] KVM: x86/pmu: Support Intel fixed counter 3 on mediated vPMU Zide Chen
2026-07-27 19:51 ` sashiko-bot
2026-07-27 22:44 ` Chen, Zide
2026-07-27 19:21 ` [PATCH v7 3/9] KVM: x86/pmu: Rename and move vcpu_get_perf_capabilities() to pmu.h Zide Chen
2026-07-27 19:42 ` sashiko-bot
2026-07-27 22:19 ` Chen, Zide
2026-07-27 19:21 ` [PATCH v7 4/9] KVM: x86/pmu: Snapshot host IA32_PERF_CAPABILITIES in kvm_host Zide Chen
2026-07-27 19:44 ` sashiko-bot
2026-07-27 23:16 ` Chen, Zide [this message]
2026-07-27 19:21 ` [PATCH v7 5/9] KVM: x86/pmu: Support PERF_METRICS MSR in mediated vPMU Zide Chen
2026-07-27 19:50 ` sashiko-bot
2026-07-27 23:55 ` Chen, Zide
2026-07-27 19:21 ` [PATCH v7 6/9] KVM: x86/pmu: Move RDPMC emulation into per-vendor callbacks Zide Chen
2026-07-27 19:21 ` [PATCH v7 7/9] KVM: x86/pmu: Restrict RDPMC passthrough to known CPUs Zide Chen
2026-07-27 19:41 ` sashiko-bot
2026-07-27 21:41 ` Chen, Zide
2026-07-27 19:21 ` [PATCH v7 8/9] KVM: x86/pmu: Emulate RDPMC on performance metrics Zide Chen
2026-07-27 19:21 ` [PATCH v7 9/9] KVM: selftests: Add PERF_METRICS and fixed counter 3 tests Zide Chen
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=f2a2588e-b198-4895-98f3-e907071a243a@intel.com \
--to=zide.chen@intel.com \
--cc=kvm@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/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