arm64: perf: Don't use of_node after putting it
Subsystems (4)
PATCH 1/2 arm64: perf: Don't use of_node after putting it
It's possible, albeit unlikely, that using the of_node here will reference freed memory. Call of_node_put() after printing the name to be safe.
--- arch/arm64/kernel/perf_event.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
arch/arm64/kernel/perf_event.c +2 -1
@@ -1340,12 +1340,13 @@ static int armpmu_device_probe(struct platform_device *pdev)if (arch_find_n_match_cpu_physical_id (dn, cpu,NULL ))break ; -of_node_put (dn);if (cpu >= nr_cpu_ids) {pr_warn ("Failed to find logical CPU for %s\n" , dn->name); +of_node_put (dn);break ; } +of_node_put (dn); irqs[i] = cpu; }
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
PATCH 2/2 arm: perf: Don't use of_node after putting it
It's possible, albeit unlikely, that using the of_node here will reference freed memory. Call of_node_put() after printing the name to be safe.
--- arch/arm/kernel/perf_event.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
arch/arm/kernel/perf_event.c +2 -1
@@ -818,12 +818,13 @@ static int of_pmu_irq_cfg(struct arm_pmu *pmu)if (arch_find_n_match_cpu_physical_id (dn, cpu,NULL ))break ; -of_node_put (dn);if (cpu >= nr_cpu_ids) {pr_warn ("Failed to find logical CPU for %s\n" , dn->name); +of_node_put (dn);break ; } +of_node_put (dn); irqs[i] = cpu;cpumask_set_cpu (cpu, &pmu->supported_cpus);
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
Hi Stephen,
Quoted 18 lines · Stephen Boyd
It's possible, albeit unlikely, that using the
of_nodehere will reference freed memory. Callof_node_put()after printing the name to be safe.Signed-off-by Stephen Boyd <[email protected]>--- arch/arm64/kernel/perf_event.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)arch/arm64/kernel/perf_event.c +0
-1@@ -1340,12 +1340,13 @@ static int armpmu_device_probe(struct platform_device *pdev)if (arch_find_n_match_cpu_physical_id (dn, cpu,NULL ))break ; -of_node_put (dn);
arch/arm64/kernel/perf_event.c static int armpmu_device_probe(struct platform_device *pdev) · line 1352
Quoted 10 lines
arch/arm64/kernel/perf_event.c +2
-0if (cpu >= nr_cpu_ids) {pr_warn ("Failed to find logical CPU for %s\n" , dn->name); +of_node_put (dn);break ; } +of_node_put (dn); irqs[i] = cpu; }
Yeah, I agree this needs changing but given (a) the CPU node isn't going to disappear and (b) this patch will conflict horribly with my queue for 4.2, do you mind if I sit on this until after the merge window (as a fix for 4.2)?
Will
Quoted 21 lines · Will Deacon
Quoted 20 lines · Stephen Boyd
arch/arm64/kernel/perf_event.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)arch/arm64/kernel/perf_event.c +2
-1@@ -1340,12 +1340,13 @@ static int armpmu_device_probe(struct platform_device *pdev)if (arch_find_n_match_cpu_physical_id (dn, cpu,NULL ))break ; -of_node_put (dn);if (cpu >= nr_cpu_ids) {pr_warn ("Failed to find logical CPU for %s\n" , dn->name); +of_node_put (dn);break ; } +of_node_put (dn);
Quoted 8 lines
arch/arm64/kernel/perf_event.c static int armpmu_device_probe(struct platform_device *pdev) · line 1352
Quoted 2 lines
arch/arm64/kernel/perf_event.c +0
-0irqs[i] = cpu; }Yeah, I agree this needs changing but given (a) the CPU node isn't going to disappear and (b) this patch will conflict horribly with my queue for 4.2, do you mind if I sit on this until after the merge window (as a fix for 4.2)?
Sure, no problem.
Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project