diff mbox series

powerpc/powermac/udbg_scc: Fix refcount leak bug in udbg_scc_init()

Message ID 20220716074344.540049-1-windhl@126.com (mailing list archive)
State Accepted
Headers show
Series powerpc/powermac/udbg_scc: Fix refcount leak bug in udbg_scc_init() | expand

Checks

Context Check Description
snowpatch_ozlabs/github-powerpc_ppctests success Successfully ran 10 jobs.
snowpatch_ozlabs/github-powerpc_selftests success Successfully ran 10 jobs.
snowpatch_ozlabs/github-powerpc_sparse success Successfully ran 4 jobs.
snowpatch_ozlabs/github-powerpc_kernel_qemu success Successfully ran 23 jobs.
snowpatch_ozlabs/github-powerpc_clang success Successfully ran 7 jobs.

Commit Message

Liang He July 16, 2022, 7:43 a.m. UTC
During the iteration of for_each_child_of_node(), we need to call
of_node_put() for the old references stored in to 'ch_def' and 'ch_a'
as their refcounters have been increased in last iteration.

Fixes: 51d3082fe6e5 ("[PATCH] powerpc: Unify udbg (#2)")
Signed-off-by: Liang He <windhl@126.com>
---
 arch/powerpc/platforms/powermac/udbg_scc.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Comments

Benjamin Herrenschmidt Aug. 2, 2022, 4:50 a.m. UTC | #1
On Sat, 2022-07-16 at 15:43 +0800, Liang He wrote:
> During the iteration of for_each_child_of_node(), we need to call
> of_node_put() for the old references stored in to 'ch_def' and 'ch_a'
> as their refcounters have been increased in last iteration.

None of these matter since those nodes are never *ever* released and
those machines don't use dynamic node allocation but ...

> Fixes: 51d3082fe6e5 ("[PATCH] powerpc: Unify udbg (#2)")
> Signed-off-by: Liang He <windhl@126.com>
> ---
>  arch/powerpc/platforms/powermac/udbg_scc.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/powerpc/platforms/powermac/udbg_scc.c
> b/arch/powerpc/platforms/powermac/udbg_scc.c
> index 734df5a32f99..1b7c39e841ee 100644
> --- a/arch/powerpc/platforms/powermac/udbg_scc.c
> +++ b/arch/powerpc/platforms/powermac/udbg_scc.c
> @@ -81,10 +81,14 @@ void __init udbg_scc_init(int force_scc)
>  	if (path != NULL)
>  		stdout = of_find_node_by_path(path);
>  	for_each_child_of_node(escc, ch) {
> -		if (ch == stdout)
> +		if (ch == stdout) {
> +			of_node_put(ch_def);
>  			ch_def = of_node_get(ch);
> -		if (of_node_name_eq(ch, "ch-a"))
> +		}
> +		if (of_node_name_eq(ch, "ch-a")) {
> +			of_node_put(ch_a);
>  			ch_a = of_node_get(ch);
> +		}
>  	}
>  	if (ch_def == NULL && !force_scc)
>  		goto bail;
Michael Ellerman Sept. 9, 2022, 12:07 p.m. UTC | #2
On Sat, 16 Jul 2022 15:43:44 +0800, Liang He wrote:
> During the iteration of for_each_child_of_node(), we need to call
> of_node_put() for the old references stored in to 'ch_def' and 'ch_a'
> as their refcounters have been increased in last iteration.
> 
> 

Applied to powerpc/next.

[1/1] powerpc/powermac/udbg_scc: Fix refcount leak bug in udbg_scc_init()
      https://git.kernel.org/powerpc/c/2378bf144b841df548161af49bf1ff393dc60d44

cheers
diff mbox series

Patch

diff --git a/arch/powerpc/platforms/powermac/udbg_scc.c b/arch/powerpc/platforms/powermac/udbg_scc.c
index 734df5a32f99..1b7c39e841ee 100644
--- a/arch/powerpc/platforms/powermac/udbg_scc.c
+++ b/arch/powerpc/platforms/powermac/udbg_scc.c
@@ -81,10 +81,14 @@  void __init udbg_scc_init(int force_scc)
 	if (path != NULL)
 		stdout = of_find_node_by_path(path);
 	for_each_child_of_node(escc, ch) {
-		if (ch == stdout)
+		if (ch == stdout) {
+			of_node_put(ch_def);
 			ch_def = of_node_get(ch);
-		if (of_node_name_eq(ch, "ch-a"))
+		}
+		if (of_node_name_eq(ch, "ch-a")) {
+			of_node_put(ch_a);
 			ch_a = of_node_get(ch);
+		}
 	}
 	if (ch_def == NULL && !force_scc)
 		goto bail;