diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2013-08-13 20:23:28 +0100 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2013-08-13 20:23:28 +0100 |
commit | 2a2822475d0e734adffab72644329d9c042ce2e1 (patch) | |
tree | f9c024e6e10807a2c0a372a4705cf7881a1ca919 /arch/arm/kernel/perf_event.c | |
parent | 2103f6cba61a8b8bea3fc1b63661d830a2125e76 (diff) | |
parent | d9f966357b14e356dbd83b8f4a197a287ab4ff83 (diff) |
Merge branch 'security-fixes' into fixes
Diffstat (limited to 'arch/arm/kernel/perf_event.c')
-rw-r--r-- | arch/arm/kernel/perf_event.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c index d9f5cd4e533f..e186ee1e63f6 100644 --- a/arch/arm/kernel/perf_event.c +++ b/arch/arm/kernel/perf_event.c @@ -53,7 +53,12 @@ armpmu_map_cache_event(const unsigned (*cache_map) static int armpmu_map_hw_event(const unsigned (*event_map)[PERF_COUNT_HW_MAX], u64 config) { - int mapping = (*event_map)[config]; + int mapping; + + if (config >= PERF_COUNT_HW_MAX) + return -EINVAL; + + mapping = (*event_map)[config]; return mapping == HW_OP_UNSUPPORTED ? -ENOENT : mapping; } @@ -253,6 +258,9 @@ validate_event(struct pmu_hw_events *hw_events, struct arm_pmu *armpmu = to_arm_pmu(event->pmu); struct pmu *leader_pmu = event->group_leader->pmu; + if (is_software_event(event)) + return 1; + if (event->pmu != leader_pmu || event->state < PERF_EVENT_STATE_OFF) return 1; |