KVM: x86/pmu: Apply event filter mechanism to emulated instructions

Message ID 20230222082002.97570-1-likexu@tencent.com
State New
Headers
Series KVM: x86/pmu: Apply event filter mechanism to emulated instructions |

Commit Message

Like Xu Feb. 22, 2023, 8:20 a.m. UTC
  From: Like Xu <likexu@tencent.com>

The check_pmu_event_filter() prevents the perf_event from being created
and stops the associated counters from increasing, the same check should
also be applied to counter increases caused by emulated instructions.
Otherwise this filter mechanism cannot be considered to be in effect.

Reported-by: Jinrong Liang <cloudliang@tencent.com>
Signed-off-by: Like Xu <likexu@tencent.com>
---
 arch/x86/kvm/pmu.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)


base-commit: 13738a3647368f7f600b30d241779bcd2a3ebbfd
  

Comments

Sean Christopherson Feb. 22, 2023, 7:28 p.m. UTC | #1
On Wed, Feb 22, 2023, Like Xu wrote:
> From: Like Xu <likexu@tencent.com>
> 
> The check_pmu_event_filter() prevents the perf_event from being created
> and stops the associated counters from increasing, the same check should
> also be applied to counter increases caused by emulated instructions.
> Otherwise this filter mechanism cannot be considered to be in effect.
> 
> Reported-by: Jinrong Liang <cloudliang@tencent.com>

Already posted by Aaron[*], but I don't think there's been a follow-up.  Aaron?

[*] https://lore.kernel.org/all/20221209194957.2774423-2-aaronlewis@google.com
  
Aaron Lewis Feb. 22, 2023, 8:38 p.m. UTC | #2
On Wed, Feb 22, 2023 at 7:28 PM Sean Christopherson <seanjc@google.com> wrote:
>
> On Wed, Feb 22, 2023, Like Xu wrote:
> > From: Like Xu <likexu@tencent.com>
> >
> > The check_pmu_event_filter() prevents the perf_event from being created
> > and stops the associated counters from increasing, the same check should
> > also be applied to counter increases caused by emulated instructions.
> > Otherwise this filter mechanism cannot be considered to be in effect.
> >
> > Reported-by: Jinrong Liang <cloudliang@tencent.com>
>
> Already posted by Aaron[*], but I don't think there's been a follow-up.  Aaron?
>
> [*] https://lore.kernel.org/all/20221209194957.2774423-2-aaronlewis@google.com

There hasn't been a follow-up yet.  I'll try to get one out in the
next week or so.
  

Patch

diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c
index 7b6c3ba2c8e1..1fd1c2f0d4da 100644
--- a/arch/x86/kvm/pmu.c
+++ b/arch/x86/kvm/pmu.c
@@ -684,7 +684,8 @@  void kvm_pmu_trigger_event(struct kvm_vcpu *vcpu, u64 perf_hw_id)
 	for_each_set_bit(i, pmu->all_valid_pmc_idx, X86_PMC_IDX_MAX) {
 		pmc = static_call(kvm_x86_pmu_pmc_idx_to_pmc)(pmu, i);
 
-		if (!pmc || !pmc_is_enabled(pmc) || !pmc_speculative_in_use(pmc))
+		if (!pmc || !pmc_is_enabled(pmc) || !pmc_speculative_in_use(pmc) ||
+		    !check_pmu_event_filter(pmc))
 			continue;
 
 		/* Ignore checks for edge detect, pin control, invert and CMASK bits */