If a child returned by device_for_each_child_node() is not backed by
a device_node, to_of_node() returns NULL and the loop is aborted with
a bare break, without releasing the reference on the current fwnode
that device_for_each_child_node() took. Call fwnode_handle_put()
before breaking out of the loop, mirroring the existing of_node_put()
call a few lines below for the "lmac == bgx->max_lmac" exit path.
Signed-off-by: manushprajwal <redacted>
---
drivers/net/ethernet/cavium/thunder/thunder_bgx.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
index b63039999..246eee327 100644
--- a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
+++ b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
@@ -1479,8 +1479,10 @@ static int bgx_init_of_phy(struct bgx *bgx)
* cannot handle it, so exit the loop.
*/
node = to_of_node(fwn);
- if (!node)
+ if (!node) {
+ fwnode_handle_put(fwn);
break;
+ }
of_get_mac_address(node, bgx->lmac[lmac].mac);
--
2.46.2.windows.1