2021-12-13 09:53:35

by 王擎

[permalink] [raw]
Subject: [PATCH] net: phy: add missing of_node_put before return

From: Wang Qing <[email protected]>

Fix following coccicheck warning:
WARNING: Function "for_each_available_child_of_node"
should have of_node_put() before return.

Early exits from for_each_available_child_of_node should decrement the
node reference counter.

Signed-off-by: Wang Qing <[email protected]>
---
drivers/net/phy/mdio_bus.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
index 9b6f2df..3c5e8937
--- a/drivers/net/phy/mdio_bus.c
+++ b/drivers/net/phy/mdio_bus.c
@@ -462,6 +462,7 @@ static void of_mdiobus_link_mdiodev(struct mii_bus *bus,

if (addr == mdiodev->addr) {
device_set_node(dev, of_fwnode_handle(child));
+ of_node_put(child);
return;
}
}
--
2.7.4



2021-12-13 11:03:31

by Russell King (Oracle)

[permalink] [raw]
Subject: Re: [PATCH] net: phy: add missing of_node_put before return

On Mon, Dec 13, 2021 at 01:44:49AM -0800, Qing Wang wrote:
> From: Wang Qing <[email protected]>
>
> Fix following coccicheck warning:
> WARNING: Function "for_each_available_child_of_node"
> should have of_node_put() before return.
>
> Early exits from for_each_available_child_of_node should decrement the
> node reference counter.

Most *definitely* NAK. Coccicheck is most definitely wrong on this one,
and we will probably need some way to tell people not to believe
coccicheck on this.

In this path, the DT node is assigned to a struct device. This _must_
be reference counted. device_set_node() does not increment the
reference count, nor does of_fwnode_handle(). The reference count
here is passed from this code over to the struct device.

Adding an of_node_put() will break this.

This must _never_ be "fixed" no matter how much coccicheck complains,
as fixing the warning _will_ introduce a refcounting bug.

I'll send a patch adding a comment to this effect.

Thanks.

--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!

2021-12-14 02:14:19

by 王擎

[permalink] [raw]
Subject: Re: [PATCH] net: phy: add missing of_node_put before return


>> From: Wang Qing <[email protected]>
>>
>> Fix following coccicheck warning:
>> WARNING: Function "for_each_available_child_of_node"
>> should have of_node_put() before return.
>>
>> Early exits from for_each_available_child_of_node should decrement the
>> node reference counter.
>
>Most *definitely* NAK. Coccicheck is most definitely wrong on this one,
>and we will probably need some way to tell people not to believe
>coccicheck on this.
>
>In this path, the DT node is assigned to a struct device. This _must_
>be reference counted. device_set_node() does not increment the
>reference count, nor does of_fwnode_handle(). The reference count
>here is passed from this code over to the struct device.
>
>Adding an of_node_put() will break this.
>
>This must _never_ be "fixed" no matter how much coccicheck complains,
>as fixing the warning _will_ introduce a refcounting bug.
>
>I'll send a patch adding a comment to this effect.
>
>Thanks.

Yes, you are right. Maybe we can add a judgment in this cocci on which exit as expected
or abnormally, only the latter needs to be reported.

Thanks,
Qing
>
>--
>RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
>FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!