| From 2012a9e279013933885983cbe0a5fe828052563b Mon Sep 17 00:00:00 2001 |
| From: Xiaomeng Tong <xiam0nd.tong@gmail.com> |
| Date: Sun, 27 Mar 2022 13:57:33 +0800 |
| Subject: perf: qcom_l2_pmu: fix an incorrect NULL check on list iterator |
| |
| From: Xiaomeng Tong <xiam0nd.tong@gmail.com> |
| |
| commit 2012a9e279013933885983cbe0a5fe828052563b upstream. |
| |
| The bug is here: |
| return cluster; |
| |
| The list iterator value 'cluster' will *always* be set and non-NULL |
| by list_for_each_entry(), so it is incorrect to assume that the |
| iterator value will be NULL if the list is empty or no element |
| is found. |
| |
| To fix the bug, return 'cluster' when found, otherwise return NULL. |
| |
| Cc: stable@vger.kernel.org |
| Fixes: 21bdbb7102ed ("perf: add qcom l2 cache perf events driver") |
| Signed-off-by: Xiaomeng Tong <xiam0nd.tong@gmail.com> |
| Link: https://lore.kernel.org/r/20220327055733.4070-1-xiam0nd.tong@gmail.com |
| Signed-off-by: Will Deacon <will@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/perf/qcom_l2_pmu.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/perf/qcom_l2_pmu.c |
| +++ b/drivers/perf/qcom_l2_pmu.c |
| @@ -736,7 +736,7 @@ static struct cluster_pmu *l2_cache_asso |
| { |
| u64 mpidr; |
| int cpu_cluster_id; |
| - struct cluster_pmu *cluster = NULL; |
| + struct cluster_pmu *cluster; |
| |
| /* |
| * This assumes that the cluster_id is in MPIDR[aff1] for |
| @@ -758,10 +758,10 @@ static struct cluster_pmu *l2_cache_asso |
| cluster->cluster_id); |
| cpumask_set_cpu(cpu, &cluster->cluster_cpus); |
| *per_cpu_ptr(l2cache_pmu->pmu_cluster, cpu) = cluster; |
| - break; |
| + return cluster; |
| } |
| |
| - return cluster; |
| + return NULL; |
| } |
| |
| static int l2cache_pmu_online_cpu(unsigned int cpu, struct hlist_node *node) |