]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.19-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 25 Apr 2022 11:18:23 +0000 (13:18 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 25 Apr 2022 11:18:23 +0000 (13:18 +0200)
added patches:
arm_pmu-validate-single-group-leader-events.patch

queue-4.19/arm_pmu-validate-single-group-leader-events.patch [new file with mode: 0644]
queue-4.19/series

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 (file)
index 0000000..74025ba
--- /dev/null
@@ -0,0 +1,54 @@
+From e5c23779f93d45e39a52758ca593bd7e62e9b4be Mon Sep 17 00:00:00 2001
+From: Rob Herring <robh@kernel.org>
+Date: Fri, 8 Apr 2022 15:33:30 -0500
+Subject: arm_pmu: Validate single/group leader events
+
+From: Rob Herring <robh@kernel.org>
+
+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 <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>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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)
index a8eac5a2b5f9a5624e0ef6f57d0f16d5b81d3794..afed2680562ca9255237be279406afe6ed52abf8 100644 (file)
@@ -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