All of lore.kernel.org
 help / color / mirror / Atom feed
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();
> 


  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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.