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 <[email protected]>
Signed-off-by: Jialin Zhang <[email protected]>
---
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;
--
2.25.1
On Tue, May 17, 2022 at 6:44 AM Jialin Zhang <[email protected]> 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 <[email protected]>
> Signed-off-by: Jialin Zhang <[email protected]>
Reviewed-by: Geert Uytterhoeven <[email protected]>
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
On Tue, May 17, 2022 at 5:44 AM Jialin Zhang <[email protected]> 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 <[email protected]>
> Signed-off-by: Jialin Zhang <[email protected]>
> ---
> drivers/iio/adc/rzg2l_adc.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
Reviewed-by: Lad Prabhakar <[email protected]>
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
>
On Tue, 17 May 2022 11:35:26 +0800
Jialin Zhang <[email protected]> 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 <[email protected]>
> Signed-off-by: Jialin Zhang <[email protected]>
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;