| From 6d6f2833bfbf296101f9f085e10488aef2601ba5 Mon Sep 17 00:00:00 2001 |
| From: Andrey Ryabinin <aryabinin@virtuozzo.com> |
| Date: Wed, 11 May 2016 16:51:51 +0300 |
| Subject: perf/x86: Fix undefined shift on 32-bit kernels |
| |
| From: Andrey Ryabinin <aryabinin@virtuozzo.com> |
| |
| commit 6d6f2833bfbf296101f9f085e10488aef2601ba5 upstream. |
| |
| Jim reported: |
| |
| UBSAN: Undefined behaviour in arch/x86/events/intel/core.c:3708:12 |
| shift exponent 35 is too large for 32-bit type 'long unsigned int' |
| |
| The use of 'unsigned long' type obviously is not correct here, make it |
| 'unsigned long long' instead. |
| |
| Reported-by: Jim Cromie <jim.cromie@gmail.com> |
| Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com> |
| Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> |
| Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> |
| Cc: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Cc: H. Peter Anvin <hpa@zytor.com> |
| Cc: Imre Palik <imrep@amazon.de> |
| Cc: Jiri Olsa <jolsa@redhat.com> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Stephane Eranian <eranian@google.com> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: Vince Weaver <vincent.weaver@maine.edu> |
| Fixes: 2c33645d366d ("perf/x86: Honor the architectural performance monitoring version") |
| Link: http://lkml.kernel.org/r/1462974711-10037-1-git-send-email-aryabinin@virtuozzo.com |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Cc: Kevin Christopher <kevinc@vmware.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/x86/kernel/cpu/perf_event_intel.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/arch/x86/kernel/cpu/perf_event_intel.c |
| +++ b/arch/x86/kernel/cpu/perf_event_intel.c |
| @@ -3601,7 +3601,7 @@ __init int intel_pmu_init(void) |
| c->idxmsk64 |= (1ULL << x86_pmu.num_counters) - 1; |
| } |
| c->idxmsk64 &= |
| - ~(~0UL << (INTEL_PMC_IDX_FIXED + x86_pmu.num_counters_fixed)); |
| + ~(~0ULL << (INTEL_PMC_IDX_FIXED + x86_pmu.num_counters_fixed)); |
| c->weight = hweight64(c->idxmsk64); |
| } |
| } |