aboutsummaryrefslogtreecommitdiff
path: root/arch/x86/kernel/cpu/perf_event_msr.c
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2018-05-18 11:44:19 +0100
committerMark Brown <broonie@kernel.org>2018-05-18 11:44:19 +0100
commit0e7fcfff8dc3b5f08f0bee84ce00d3234992e0d2 (patch)
tree26197742be1599e1fb8aa38cde3f0a2e7526d20d /arch/x86/kernel/cpu/perf_event_msr.c
parent2da9deac1e123ce8f9c22919f9f49b3a50d0c3fd (diff)
parent69847b97f21141c2d4f6e9c1b22d932b7add3182 (diff)
Merge tag 'v4.4.132' into linux-linaro-lsk-v4.4
This is the 4.4.132 stable release
Diffstat (limited to 'arch/x86/kernel/cpu/perf_event_msr.c')
-rw-r--r--arch/x86/kernel/cpu/perf_event_msr.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/x86/kernel/cpu/perf_event_msr.c b/arch/x86/kernel/cpu/perf_event_msr.c
index ec863b9a9f78..067427384a63 100644
--- a/arch/x86/kernel/cpu/perf_event_msr.c
+++ b/arch/x86/kernel/cpu/perf_event_msr.c
@@ -1,4 +1,5 @@
#include <linux/perf_event.h>
+#include <linux/nospec.h>
enum perf_msr_id {
PERF_MSR_TSC = 0,
@@ -115,9 +116,6 @@ static int msr_event_init(struct perf_event *event)
if (event->attr.type != event->pmu->type)
return -ENOENT;
- if (cfg >= PERF_MSR_EVENT_MAX)
- return -EINVAL;
-
/* unsupported modes and filters */
if (event->attr.exclude_user ||
event->attr.exclude_kernel ||
@@ -128,6 +126,11 @@ static int msr_event_init(struct perf_event *event)
event->attr.sample_period) /* no sampling */
return -EINVAL;
+ if (cfg >= PERF_MSR_EVENT_MAX)
+ return -EINVAL;
+
+ cfg = array_index_nospec((unsigned long)cfg, PERF_MSR_EVENT_MAX);
+
if (!msr[cfg].attr)
return -EINVAL;