From: "Chen, Zide" <zide.chen@intel.com>
To: Jim Mattson <jmattson@google.com>, Yosry Ahmed <yosry@kernel.org>
Cc: Sean Christopherson <seanjc@google.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
kvm@vger.kernel.org, Andi Kleen <ak@linux.intel.com>,
Stephane Eranian <eranian@google.com>,
linux-kernel@vger.kernel.org, Mingwei Zhang <mizhang@google.com>,
Das Sandipan <Sandipan.Das@amd.com>,
Shukla Manali <Manali.Shukla@amd.com>,
Dapeng Mi <dapeng1.mi@linux.intel.com>,
Xudong Hao <xudong.hao@intel.com>
Subject: Re: [PATCH v2 11/16] KVM: x86/pmu: Emulate the GLOBAL_STATUS_SET and GLOBAL_INUSE MSRs
Date: Mon, 2 Nov 2026 22:32:42 -0600 [thread overview]
Message-ID: <62504426-a365-4523-8f58-804f5fe1c1d1@intel.com> (raw)
In-Reply-To: <CALMp9eQPaGG+-wsfp541OTJAP2G0Pq9L2aDeRG0_MFHoa67x0w@mail.gmail.com>
On 11/2/2026 5:44 PM, Jim Mattson wrote:
> On Mon, Nov 2, 2026 at 2:52 PM Yosry Ahmed <yosry@kernel.org> wrote:
>>
>> On Mon, Nov 2, 2026 at 2:48 PM Chen, Zide <zide.chen@intel.com> wrote:
>>>
>>>
>>>
>>> On 11/2/2026 4:25 PM, Jim Mattson wrote:
>>>> On Mon, Nov 2, 2026 at 2:13 PM Chen, Zide <zide.chen@intel.com> wrote:
>>>>>
>>>>>
>>>>> On 11/2/2026 3:36 PM, Yosry Ahmed wrote:
>>>>>>>>>> 1. GLOBAL_STATUS_TRACE_TOPAPMI_BIT can leak from the host into the
>>>>>>>>>> guest. If a host PT PMI arrives while the guest context is loaded, bit
>>>>>>>>>> 55 will be set for the guest, and the guest won't be able to clear it if
>>>>>>>>>> OVF_CTRL is intercepted (it will #GP as it is reserved for the guest).
>>>>>>>>>> Similarly, the value can't be restored through KVM_SET_MSRS.
>>>>>>>>> I think mediated vPMU assumes that no host PMIs can be generated while
>>>>>>>>> guest PMU state is loaded.
>>>>>>>>>
>>>>>>>>> If PT state can leak into the guest via bit 55, similar leakage can also
>>>>>>>>> occur for other status bits, e.g. when the guest exposes fewer
>>>>>>>>> general-purpose or fixed counters than the host.
>>>>>>>>>
>>>>>>>>> The scenario where both host and guest can be active simultaneously is
>>>>>>>>> handled by the perfmon_mask case, where intel_mediated_pmu_{load,put}()
>>>>>>>>> filter guest-owned status bits.
>>>>>>>> Looking at the code:
>>>>>>>>
>>>>>>>> kvm_mediated_pmu_load() -> perf_load_guest_context() ->
>>>>>>>> perf_ctx_disable() will iterate PMUs with for_each_epc() and disable
>>>>>>>> them, which skips PMUs without PERF_PMU_CAP_MEDIATED_VPMU.
>>>>>>>>
>>>>>>>> Same for kvm_mediated_pmu_load() -> perf_load_guest_context()
>>>>>>>> ->ctx_sched_out(), it also uses for_each_epc() to iterate PMUs and
>>>>>>>> schedule them out.
>>>>>>>>
>>>>>>>> pt_init() does not set PERF_PMU_CAP_MEDIATED_VPMU on pt_pmu.pmu.capabilities
>>>>>>>>
>>>>>>>> Please correct me if I am wrong.
>>>>>>> My apologies, this bug is indeed real because pt_pmu lacks the
>>>>>>> PERF_PMU_CAP_MEDIATED_VPMU capability.
>>>>>>>
>>>>>>> Adding this capability to pt_pmu seems intuitive, but unlike
>>>>>>>
>>>>>>> the core PMU (which merely toggles enable bits),
>>>>>>> Intel PT is an AUX-based PMU. Stopping and restarting it on every VM
>>>>>>> transition is heavier, and I'm not sure whether it could introduce a
>>>>>>> noticeable performance penalty.
>>>>>>>
>>>>>>> However, whether the solution is adding PERF_PMU_CAP_MEDIATED_VPMU or
>>>>>>> some other mechanism to enforce mutual exclusion between pt_pmu and
>>>>>>> mediated vPMU, we can address that in a separate patch.
>>>>>>>
>>>>>>> To immediately protect guest state and live migration in this series,
>>>>>>> I'm thinking of adding the following defensive filter in
>>>>>>> intel_mediated_pmu_put():
>>>>>>>
>>>>>>> + /*
>>>>>>> + * Scrub bits that are not virtualized for the guest to prevent
>>>>>>> + * possible host state from leaking into guest state and breaking
>>>>>>> + * live migration.
>>>>>>> + */
>>>>>>> + pmu->global_status &= ~pmu->global_status_rsvd;
>>>>>> This doesn't prevent the leakage, it just clears it on the guest->host
>>>>>> switch. So it helps live migration but I am not sure if it's better or
>>>>>> worse if the guest sees the bit unexpectedly appear AND then
>>>>>> unexpectedly disappear.
>>>>> Right, as long as the GLOBAL_STATUS is passthru, the leak can't be
>>>>> prevented.
>>>>>> We can clear it when the MSR is read by userspace, which should fix
>>>>>> live migration, but the guest will still see the bit, and it will
>>>>>> still disappear unexpectedly but only during live migration.
>>>>>>
>>>>>> The guest still won't be able to clear it when OVF_CTRL is intercepted.
>>>>> GLOBAL_STATUS and OVF_CTRL share the same interception policy. If they
>>>>> are passed through, the guest can see the bit and clear it; if both are
>>>>> intercepted, then bit 55 can't leak to the guest.
>>>>>
>>>>> It's not perfect, but at least the guest won't observe bit 55 and then
>>>>> get an unexpected #GP when attempting to clear it.
>>>> I'm not sure what imperfect solution you are referring to, but Yosry's
>>>> proposal that the bit gets cleared on a guest->host switch is a
>>>> non-starter. MSR bits must not vanish unpredictably.
>>
>> I don't think I proposed this? :)
>>
>>>
>>> Agree, then maybe Yosry's suggestion is what we can do for now: filter
>>> out unsupported bits when the MSR is read by userspace.
>>
>> This I did propose, but I also noted that the MSR bit will still
>> vanish unpredictable, just on save/restore instead of guest->host
>> switch, which should be better.
>
> I will reject any proposal that involves MSR bits vanishing unpredictably.
In that case, perhaps the simplest approach is to leave this issue out
of this series and fix the Intel PT mutual exclusion issue separately?
Also, once that issue is fixed, filtering out pmu->global_status_rsvd
bits feels mostly defensive anyway, and I'm not sure it solves any
additional problem by itself.
next prev parent reply other threads:[~2026-11-03 4:32 UTC|newest]
Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-27 22:37 [PATCH] KVM: x86/pmu: Add mediated vPMU PerfMon v5 support Zide Chen
2026-08-27 22:37 ` [PATCH v2 01/16] KVM: x86/pmu: Remove redundant Perf Global Status MSR bit definitions Zide Chen
2026-09-01 2:07 ` Mi, Dapeng
2026-10-28 14:03 ` Jim Mattson
2026-08-27 22:37 ` [PATCH v2 02/16] KVM: x86/pmu: Rename all_valid_pmc_idx to pmc_exists Zide Chen
2026-09-01 2:09 ` Mi, Dapeng
2026-10-28 14:04 ` Jim Mattson
2026-08-27 22:37 ` [PATCH v2 03/16] KVM: x86/pmu: Rename reserved_bits to eventsel_rsvd in kvm_pmu Zide Chen
2026-09-01 2:17 ` Mi, Dapeng
2026-10-28 14:05 ` Jim Mattson
2026-11-02 13:53 ` Sandipan Das
2026-08-27 22:37 ` [PATCH v2 04/16] KVM: x86/pmu: Gate BUFFER_OVF reserved bit on guest DS Zide Chen
2026-09-01 2:30 ` Mi, Dapeng
2026-10-28 14:25 ` Jim Mattson
2026-10-28 19:05 ` Chen, Zide
2026-08-27 22:37 ` [PATCH v2 05/16] KVM: x86/pmu: Add PMC bitmap accessor helpers Zide Chen
2026-09-01 2:43 ` Mi, Dapeng
2026-10-28 14:32 ` Jim Mattson
2026-10-28 17:24 ` Chen, Zide
2026-08-27 22:37 ` [PATCH v2 06/16] KVM: x86/pmu: Drop nr_arch_{gp,fixed}_counters from kvm_pmu Zide Chen
2026-09-01 3:07 ` Mi, Dapeng
2026-10-28 14:49 ` Jim Mattson
2026-10-28 17:04 ` Chen, Zide
2026-08-27 22:37 ` [PATCH v2 07/16] KVM: x86/pmu: Expose kvm_host_pmu to vendor modules Zide Chen
2026-09-01 3:08 ` Mi, Dapeng
2026-10-28 17:33 ` Jim Mattson
2026-08-27 22:37 ` [PATCH v2 08/16] perf/x86: Plumb counter bitmap from x86_pmu to x86_pmu_cap Zide Chen
2026-10-28 17:39 ` Jim Mattson
2026-08-27 22:37 ` [PATCH v2 09/16] KVM: x86/pmu: Switch to bitmask-based KVM PMU capabilities Zide Chen
2026-09-01 3:32 ` Mi, Dapeng
2026-10-28 17:57 ` Jim Mattson
2026-10-28 20:56 ` Chen, Zide
2026-08-27 22:37 ` [PATCH v2 10/16] perf/x86: Remove num_counters_{gp,fixed} from x86_pmu_capability Zide Chen
2026-10-28 18:01 ` Jim Mattson
2026-08-27 22:37 ` [PATCH v2 11/16] KVM: x86/pmu: Emulate the GLOBAL_STATUS_SET and GLOBAL_INUSE MSRs Zide Chen
2026-09-01 6:45 ` Mi, Dapeng
2026-09-01 14:20 ` Chen, Zide
2026-09-02 0:44 ` Mi, Dapeng
2026-10-28 21:24 ` Jim Mattson
2026-10-29 17:45 ` Chen, Zide
2026-10-30 11:55 ` Jim Mattson
2026-10-30 17:20 ` Chen, Zide
2026-10-30 18:23 ` Jim Mattson
2026-10-30 20:01 ` Chen, Zide
2026-10-30 22:13 ` Yosry Ahmed
2026-11-02 17:38 ` Chen, Zide
2026-11-02 18:32 ` Jim Mattson
2026-11-02 18:49 ` Yosry Ahmed
2026-11-02 21:29 ` Chen, Zide
2026-11-02 21:36 ` Yosry Ahmed
2026-11-02 22:13 ` Chen, Zide
2026-11-02 22:25 ` Jim Mattson
2026-11-02 22:48 ` Chen, Zide
2026-11-02 22:51 ` Yosry Ahmed
2026-11-02 23:26 ` Chen, Zide
2026-11-02 23:37 ` Yosry Ahmed
2026-11-03 4:32 ` Chen, Zide
2026-11-02 23:44 ` Jim Mattson
2026-11-03 4:32 ` Chen, Zide [this message]
2026-08-27 22:37 ` [PATCH v2 12/16] KVM: x86/pmu: Populate CPUID.0AH:ECX fixed-counter bitmap Zide Chen
2026-09-01 6:50 ` Mi, Dapeng
2026-10-28 21:29 ` Jim Mattson
2026-10-28 21:55 ` Chen, Zide
2026-08-27 22:37 ` [PATCH v2 13/16] KVM: x86/pmu: Factor out fixed counter control bit calculation Zide Chen
2026-09-01 6:57 ` Mi, Dapeng
2026-10-28 21:30 ` Jim Mattson
2026-08-27 22:37 ` [PATCH v2 14/16] KVM: x86/pmu: Ignore AnyThread bit if CPUID.0AH:EDX[15] is set Zide Chen
2026-09-01 8:01 ` Mi, Dapeng
2026-10-28 21:50 ` Jim Mattson
2026-10-28 23:05 ` Chen, Zide
2026-10-28 23:09 ` Jim Mattson
2026-08-27 22:37 ` [PATCH v2 15/16] KVM: x86/pmu: Advertise PerfMon version 5 on Intel hosts Zide Chen
2026-10-28 21:59 ` Jim Mattson
2026-10-28 22:10 ` Chen, Zide
2026-08-27 22:37 ` [PATCH v2 16/16] KVM: selftests: Support fixed counters bitmap in pmu_counters_test Zide Chen
2026-08-29 9:30 ` [PATCH] KVM: x86/pmu: Add mediated vPMU PerfMon v5 support Peter Zijlstra
2026-10-19 19:15 ` [PATCH v2] " Chen, Zide
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=62504426-a365-4523-8f58-804f5fe1c1d1@intel.com \
--to=zide.chen@intel.com \
--cc=Manali.Shukla@amd.com \
--cc=Sandipan.Das@amd.com \
--cc=ak@linux.intel.com \
--cc=dapeng1.mi@linux.intel.com \
--cc=eranian@google.com \
--cc=jmattson@google.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mizhang@google.com \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=seanjc@google.com \
--cc=xudong.hao@intel.com \
--cc=yosry@kernel.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
all inboxes | Powered by JetHome®