From: Greg Kroah-Hartman Date: Mon, 15 Aug 2022 15:59:32 +0000 (+0200) Subject: 5.10-stable patches X-Git-Tag: v5.15.61~18 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=615ae19b9351fa57e28bcd6b86ec09c4af8718bc;p=thirdparty%2Fkernel%2Fstable-queue.git 5.10-stable patches added patches: kvm-x86-pmu-fix-the-compare-function-used-by-the-pmu-event-filter.patch --- diff --git a/queue-5.10/kvm-x86-pmu-fix-the-compare-function-used-by-the-pmu-event-filter.patch b/queue-5.10/kvm-x86-pmu-fix-the-compare-function-used-by-the-pmu-event-filter.patch new file mode 100644 index 00000000000..092f20950f6 --- /dev/null +++ b/queue-5.10/kvm-x86-pmu-fix-the-compare-function-used-by-the-pmu-event-filter.patch @@ -0,0 +1,44 @@ +From 4ac19ead0dfbabd8e0bfc731f507cfb0b95d6c99 Mon Sep 17 00:00:00 2001 +From: Aaron Lewis +Date: Tue, 17 May 2022 05:12:36 +0000 +Subject: kvm: x86/pmu: Fix the compare function used by the pmu event filter + +From: Aaron Lewis + +commit 4ac19ead0dfbabd8e0bfc731f507cfb0b95d6c99 upstream. + +When returning from the compare function the u64 is truncated to an +int. This results in a loss of the high nybble[1] in the event select +and its sign if that nybble is in use. Switch from using a result that +can end up being truncated to a result that can only be: 1, 0, -1. + +[1] bits 35:32 in the event select register and bits 11:8 in the event + select. + +Fixes: 7ff775aca48ad ("KVM: x86/pmu: Use binary search to check filtered events") +Signed-off-by: Aaron Lewis +Reviewed-by: Sean Christopherson +Message-Id: <20220517051238.2566934-1-aaronlewis@google.com> +Signed-off-by: Paolo Bonzini +Signed-off-by: Greg Kroah-Hartman +--- + arch/x86/kvm/pmu.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +--- a/arch/x86/kvm/pmu.c ++++ b/arch/x86/kvm/pmu.c +@@ -170,9 +170,12 @@ static bool pmc_resume_counter(struct kv + return true; + } + +-static int cmp_u64(const void *a, const void *b) ++static int cmp_u64(const void *pa, const void *pb) + { +- return *(__u64 *)a - *(__u64 *)b; ++ u64 a = *(u64 *)pa; ++ u64 b = *(u64 *)pb; ++ ++ return (a > b) - (a < b); + } + + void reprogram_gp_counter(struct kvm_pmc *pmc, u64 eventsel) diff --git a/queue-5.10/series b/queue-5.10/series index 5c8ab7a5753..8130d962fc9 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -541,3 +541,4 @@ drm-vc4-change-vc4_dma_range_matches-from-a-global-to-static.patch revert-net-usb-ax88179_178a-needs-flag_send_zlp.patch bluetooth-l2cap-fix-l2cap_global_chan_by_psm-regression.patch mtd-rawnand-arasan-prevent-an-unsupported-configuration.patch +kvm-x86-pmu-fix-the-compare-function-used-by-the-pmu-event-filter.patch