From: Greg Kroah-Hartman Date: Mon, 25 Apr 2022 11:18:23 +0000 (+0200) Subject: 4.19-stable patches X-Git-Tag: v4.9.312~38 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c6880fcb772bd14e715d89fc3d950b535cc5be0e;p=thirdparty%2Fkernel%2Fstable-queue.git 4.19-stable patches added patches: arm_pmu-validate-single-group-leader-events.patch --- diff --git a/queue-4.19/arm_pmu-validate-single-group-leader-events.patch b/queue-4.19/arm_pmu-validate-single-group-leader-events.patch new file mode 100644 index 00000000000..74025ba73f7 --- /dev/null +++ b/queue-4.19/arm_pmu-validate-single-group-leader-events.patch @@ -0,0 +1,54 @@ +From e5c23779f93d45e39a52758ca593bd7e62e9b4be Mon Sep 17 00:00:00 2001 +From: Rob Herring +Date: Fri, 8 Apr 2022 15:33:30 -0500 +Subject: arm_pmu: Validate single/group leader events + +From: Rob Herring + +commit e5c23779f93d45e39a52758ca593bd7e62e9b4be upstream. + +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 +Cc: Will Deacon +Cc: Mark Rutland +Signed-off-by: Rob Herring +Acked-by: Mark Rutland +Link: https://lore.kernel.org/r/20220408203330.4014015-1-robh@kernel.org +Cc: +Signed-off-by: Will Deacon +Signed-off-by: Greg Kroah-Hartman +--- + drivers/perf/arm_pmu.c | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +--- a/drivers/perf/arm_pmu.c ++++ b/drivers/perf/arm_pmu.c +@@ -321,6 +321,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; +@@ -418,12 +421,7 @@ __hw_perf_event_init(struct perf_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) diff --git a/queue-4.19/series b/queue-4.19/series index a8eac5a2b5f..afed2680562 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -35,3 +35,4 @@ openvswitch-fix-oob-access-in-reserve_sfa_size.patch asoc-soc-dapm-fix-two-incorrect-uses-of-list-iterator.patch e1000e-fix-possible-overflow-in-ltr-decoding.patch arc-entry-fix-syscall_trace_exit-argument.patch +arm_pmu-validate-single-group-leader-events.patch