diff mbox series

iio: adc: rzg2l_adc: add missing fwnode_handle_put() in rzg2l_adc_parse_properties()

Message ID 20220517033526.2035735-1-zhangjialin11@huawei.com (mailing list archive)
State Mainlined
Commit d836715f588ea15f905f607c27bc693587058db4
Delegated to: Geert Uytterhoeven
Headers show
Series iio: adc: rzg2l_adc: add missing fwnode_handle_put() in rzg2l_adc_parse_properties() | expand

Commit Message

Jialin Zhang May 17, 2022, 3:35 a.m. UTC
fwnode_handle_put() should be used when terminating
device_for_each_child_node() iteration with break or
return to prevent stale device node references from
being left behind.

Fixes: d484c21bacfa ("iio: adc: Add driver for Renesas RZ/G2L A/D converter")
Reported-by: Hulk Robot <hulkci@huawei.com>
Signed-off-by: Jialin Zhang <zhangjialin11@huawei.com>
---
 drivers/iio/adc/rzg2l_adc.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Comments

Geert Uytterhoeven May 17, 2022, 7:06 a.m. UTC | #1
On Tue, May 17, 2022 at 6:44 AM Jialin Zhang <zhangjialin11@huawei.com> wrote:
> fwnode_handle_put() should be used when terminating
> device_for_each_child_node() iteration with break or
> return to prevent stale device node references from
> being left behind.
>
> Fixes: d484c21bacfa ("iio: adc: Add driver for Renesas RZ/G2L A/D converter")
> Reported-by: Hulk Robot <hulkci@huawei.com>
> Signed-off-by: Jialin Zhang <zhangjialin11@huawei.com>

Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

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
Prabhakar May 18, 2022, 7:36 p.m. UTC | #2
On Tue, May 17, 2022 at 5:44 AM Jialin Zhang <zhangjialin11@huawei.com> wrote:
>
> fwnode_handle_put() should be used when terminating
> device_for_each_child_node() iteration with break or
> return to prevent stale device node references from
> being left behind.
>
> Fixes: d484c21bacfa ("iio: adc: Add driver for Renesas RZ/G2L A/D converter")
> Reported-by: Hulk Robot <hulkci@huawei.com>
> Signed-off-by: Jialin Zhang <zhangjialin11@huawei.com>
> ---
>  drivers/iio/adc/rzg2l_adc.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>

Cheers,
Prabhakar

> diff --git a/drivers/iio/adc/rzg2l_adc.c b/drivers/iio/adc/rzg2l_adc.c
> index 7585144b9715..5b09a93fdf34 100644
> --- a/drivers/iio/adc/rzg2l_adc.c
> +++ b/drivers/iio/adc/rzg2l_adc.c
> @@ -334,11 +334,15 @@ static int rzg2l_adc_parse_properties(struct platform_device *pdev, struct rzg2l
>         i = 0;
>         device_for_each_child_node(&pdev->dev, fwnode) {
>                 ret = fwnode_property_read_u32(fwnode, "reg", &channel);
> -               if (ret)
> +               if (ret) {
> +                       fwnode_handle_put(fwnode);
>                         return ret;
> +               }
>
> -               if (channel >= RZG2L_ADC_MAX_CHANNELS)
> +               if (channel >= RZG2L_ADC_MAX_CHANNELS) {
> +                       fwnode_handle_put(fwnode);
>                         return -EINVAL;
> +               }
>
>                 chan_array[i].type = IIO_VOLTAGE;
>                 chan_array[i].indexed = 1;
> --
> 2.25.1
>
Jonathan Cameron May 22, 2022, 11:28 a.m. UTC | #3
On Tue, 17 May 2022 11:35:26 +0800
Jialin Zhang <zhangjialin11@huawei.com> wrote:

> fwnode_handle_put() should be used when terminating
> device_for_each_child_node() iteration with break or
> return to prevent stale device node references from
> being left behind.
> 
> Fixes: d484c21bacfa ("iio: adc: Add driver for Renesas RZ/G2L A/D converter")
> Reported-by: Hulk Robot <hulkci@huawei.com>
> Signed-off-by: Jialin Zhang <zhangjialin11@huawei.com>
Applied to the fixes-togreg branch of iio.git.

Thanks,

Jonathan

> ---
>  drivers/iio/adc/rzg2l_adc.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/iio/adc/rzg2l_adc.c b/drivers/iio/adc/rzg2l_adc.c
> index 7585144b9715..5b09a93fdf34 100644
> --- a/drivers/iio/adc/rzg2l_adc.c
> +++ b/drivers/iio/adc/rzg2l_adc.c
> @@ -334,11 +334,15 @@ static int rzg2l_adc_parse_properties(struct platform_device *pdev, struct rzg2l
>  	i = 0;
>  	device_for_each_child_node(&pdev->dev, fwnode) {
>  		ret = fwnode_property_read_u32(fwnode, "reg", &channel);
> -		if (ret)
> +		if (ret) {
> +			fwnode_handle_put(fwnode);
>  			return ret;
> +		}
>  
> -		if (channel >= RZG2L_ADC_MAX_CHANNELS)
> +		if (channel >= RZG2L_ADC_MAX_CHANNELS) {
> +			fwnode_handle_put(fwnode);
>  			return -EINVAL;
> +		}
>  
>  		chan_array[i].type = IIO_VOLTAGE;
>  		chan_array[i].indexed = 1;
diff mbox series

Patch

diff --git a/drivers/iio/adc/rzg2l_adc.c b/drivers/iio/adc/rzg2l_adc.c
index 7585144b9715..5b09a93fdf34 100644
--- a/drivers/iio/adc/rzg2l_adc.c
+++ b/drivers/iio/adc/rzg2l_adc.c
@@ -334,11 +334,15 @@  static int rzg2l_adc_parse_properties(struct platform_device *pdev, struct rzg2l
 	i = 0;
 	device_for_each_child_node(&pdev->dev, fwnode) {
 		ret = fwnode_property_read_u32(fwnode, "reg", &channel);
-		if (ret)
+		if (ret) {
+			fwnode_handle_put(fwnode);
 			return ret;
+		}
 
-		if (channel >= RZG2L_ADC_MAX_CHANNELS)
+		if (channel >= RZG2L_ADC_MAX_CHANNELS) {
+			fwnode_handle_put(fwnode);
 			return -EINVAL;
+		}
 
 		chan_array[i].type = IIO_VOLTAGE;
 		chan_array[i].indexed = 1;