mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 14:12:06 +00:00
arm_pmu: Validate single/group leader events
In the case where there is only a cycle counter available (i.e. PMCR_EL0.N is 0) and an event other than CPU cycles is opened, the open should fail as the event can never possibly be scheduled. However, the event validation when an event is opened is skipped when the group leader is opened. Fix this by always validating the group leader events. Reported-by: Al Grant <al.grant@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Rob Herring <robh@kernel.org> Acked-by: Mark Rutland <mark.rutland@arm.com> Link: https://lore.kernel.org/r/20220408203330.4014015-1-robh@kernel.org Cc: <stable@vger.kernel.org> Signed-off-by: Will Deacon <will@kernel.org>
This commit is contained in:
parent
d02b4dd84e
commit
e5c23779f9
@ -400,6 +400,9 @@ validate_group(struct perf_event *event)
|
||||
if (!validate_event(event->pmu, &fake_pmu, leader))
|
||||
return -EINVAL;
|
||||
|
||||
if (event == leader)
|
||||
return 0;
|
||||
|
||||
for_each_sibling_event(sibling, leader) {
|
||||
if (!validate_event(event->pmu, &fake_pmu, sibling))
|
||||
return -EINVAL;
|
||||
@ -489,12 +492,7 @@ __hw_perf_event_init(struct perf_event *event)
|
||||
local64_set(&hwc->period_left, hwc->sample_period);
|
||||
}
|
||||
|
||||
if (event->group_leader != event) {
|
||||
if (validate_group(event) != 0)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return validate_group(event);
|
||||
}
|
||||
|
||||
static int armpmu_event_init(struct perf_event *event)
|
||||
|
Loading…
Reference in New Issue
Block a user