2023-07-06 07:19:04

by Lu Hongfei

[permalink] [raw]
Subject: [PATCH] drivers: bus: Fix resource leaks in for_each_available_child_of_node loop

Ensure child node references are decremented properly in
the error path.

Signed-off-by: Lu Hongfei <[email protected]>
---
drivers/bus/imx-weim.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/bus/imx-weim.c b/drivers/bus/imx-weim.c
index 52a5d0447390..d05472f7c20f 100644
--- a/drivers/bus/imx-weim.c
+++ b/drivers/bus/imx-weim.c
@@ -251,6 +251,7 @@ static int weim_parse_dt(struct platform_device *pdev)
else
have_child = 1;
}
+ of_node_put(child);

if (have_child)
ret = of_platform_default_populate(pdev->dev.of_node,
--
2.39.0



2023-07-06 08:04:34

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [PATCH] drivers: bus: Fix resource leaks in for_each_available_child_of_node loop

On Thu, Jul 6, 2023 at 9:43 AM Geert Uytterhoeven <[email protected]> wrote:
> On Thu, Jul 6, 2023 at 9:13 AM Lu Hongfei <[email protected]> wrote:
> > Ensure child node references are decremented properly in
> > the error path.
>
> Which error path?
>
> >
> > Signed-off-by: Lu Hongfei <[email protected]>
> > ---
> > drivers/bus/imx-weim.c | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > diff --git a/drivers/bus/imx-weim.c b/drivers/bus/imx-weim.c
> > index 52a5d0447390..d05472f7c20f 100644
> > --- a/drivers/bus/imx-weim.c
> > +++ b/drivers/bus/imx-weim.c
> > @@ -251,6 +251,7 @@ static int weim_parse_dt(struct platform_device *pdev)
> > else
> > have_child = 1;
> > }
> > + of_node_put(child);
>
> This is not an error path.
>
> for_each_available_child_of_node() walks a list, getting a reference
> to each child, and releasing the reference afterwards.

FTR, calling of_node_put() manually is only needed when breaking
out of for_each_available_child_of_node().

>
> Have you tested this patch?
> I expect the of_node_put() to trigger a refcount underflow error
> message on the console.
>
> >
> > if (have_child)
> > ret = of_platform_default_populate(pdev->dev.of_node,

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2023-07-06 08:16:09

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [PATCH] drivers: bus: Fix resource leaks in for_each_available_child_of_node loop

Hi Lu,

Thanks for your patch!

On Thu, Jul 6, 2023 at 9:13 AM Lu Hongfei <[email protected]> wrote:
> Ensure child node references are decremented properly in
> the error path.

Which error path?

>
> Signed-off-by: Lu Hongfei <[email protected]>
> ---
> drivers/bus/imx-weim.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/bus/imx-weim.c b/drivers/bus/imx-weim.c
> index 52a5d0447390..d05472f7c20f 100644
> --- a/drivers/bus/imx-weim.c
> +++ b/drivers/bus/imx-weim.c
> @@ -251,6 +251,7 @@ static int weim_parse_dt(struct platform_device *pdev)
> else
> have_child = 1;
> }
> + of_node_put(child);

This is not an error path.

for_each_available_child_of_node() walks a list, getting a reference
to each child, and releasing the reference afterwards.

Have you tested this patch?
I expect the of_node_put() to trigger a refcount underflow error
message on the console.

>
> if (have_child)
> ret = of_platform_default_populate(pdev->dev.of_node,

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds