From: Zijun Hu <quic_zijuhu@xxxxxxxxxxx> commit a2d633cb1421e679b56f1a9fe1f42f089706f1ed upstream. For macro for_each_child_of_node(parent, child), refcount of @child has been increased before entering its loop body, so normally needs to call of_node_put(@child) before returning from the loop body to avoid refcount leakage. of_phy_provider_lookup() has such usage but does not call of_node_put() before returning, so cause leakage of the OF node refcount. Fix by simply calling of_node_put() before returning from the loop body. The APIs affected by this issue are shown below since they indirectly invoke problematic of_phy_provider_lookup(). phy_get() of_phy_get() devm_phy_get() devm_of_phy_get() devm_of_phy_get_by_index() Fixes: 2a4c37016ca9 ("phy: core: Fix of_phy_provider_lookup to return PHY provider for sub node") Cc: stable@xxxxxxxxxxxxxxx Reviewed-by: Johan Hovold <johan+linaro@xxxxxxxxxx> Signed-off-by: Zijun Hu <quic_zijuhu@xxxxxxxxxxx> Link: https://lore.kernel.org/r/20241213-phy_core_fix-v6-5-40ae28f5015a@xxxxxxxxxxx Signed-off-by: Vinod Koul <vkoul@xxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- drivers/phy/phy-core.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --- a/drivers/phy/phy-core.c +++ b/drivers/phy/phy-core.c @@ -138,8 +138,10 @@ static struct phy_provider *of_phy_provi return phy_provider; for_each_child_of_node(phy_provider->children, child) - if (child == node) + if (child == node) { + of_node_put(child); return phy_provider; + } } return ERR_PTR(-EPROBE_DEFER); Patches currently in stable-queue which might be from quic_zijuhu@xxxxxxxxxxx are queue-5.4/phy-core-fix-that-api-devm_phy_destroy-fails-to-destroy-the-phy.patch queue-5.4/phy-core-fix-an-of-node-refcount-leakage-in-of_phy_provider_lookup.patch queue-5.4/of-irq-fix-using-uninitialized-variable-addr_len-in-api-of_irq_parse_one.patch queue-5.4/phy-core-fix-an-of-node-refcount-leakage-in-_of_phy_get.patch queue-5.4/phy-core-fix-that-api-devm_phy_put-fails-to-release-the-phy.patch queue-5.4/of-fix-refcount-leakage-for-of-node-returned-by-__of_get_dma_parent.patch