Commit e5c23779 authored by Rob Herring's avatar Rob Herring Committed by Will Deacon
Browse files

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: default avatarAl Grant <al.grant@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarRob Herring <robh@kernel.org>
Acked-by: default avatarMark 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: default avatarWill Deacon <will@kernel.org>
parent d02b4dd8
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -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)