Skip to content

Commit e5c2377

Browse files
robherringwilldeacon
authored andcommitted
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>
1 parent d02b4dd commit e5c2377

File tree

1 file changed

+4
-6
lines changed

1 file changed

+4
-6
lines changed

drivers/perf/arm_pmu.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,9 @@ validate_group(struct perf_event *event)
400400
if (!validate_event(event->pmu, &fake_pmu, leader))
401401
return -EINVAL;
402402

403+
if (event == leader)
404+
return 0;
405+
403406
for_each_sibling_event(sibling, leader) {
404407
if (!validate_event(event->pmu, &fake_pmu, sibling))
405408
return -EINVAL;
@@ -489,12 +492,7 @@ __hw_perf_event_init(struct perf_event *event)
489492
local64_set(&hwc->period_left, hwc->sample_period);
490493
}
491494

492-
if (event->group_leader != event) {
493-
if (validate_group(event) != 0)
494-
return -EINVAL;
495-
}
496-
497-
return 0;
495+
return validate_group(event);
498496
}
499497

500498
static int armpmu_event_init(struct perf_event *event)

0 commit comments

Comments
 (0)