diff options
author | David S. Miller <davem@davemloft.net> | 2016-11-17 18:05:05 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-11-17 18:05:05 +0100 |
commit | 30563f933a27eb9f9391a0e531dffde5182e422a (patch) | |
tree | 381af7ec4c3b40e0955f9cb8fcf42f3a7a1eb0d5 | |
parent | net: check dead netns for peernet2id_alloc() (diff) | |
parent | net: phy: fixed_phy: fix of_node leak in fixed_phy_unregister (diff) | |
download | linux-30563f933a27eb9f9391a0e531dffde5182e422a.tar.xz linux-30563f933a27eb9f9391a0e531dffde5182e422a.zip |
Merge branch 'phy-dev-leaks'
Johan Hovold says:
====================
net: phy: fix of_node and device leaks
These patches fix a couple of of_node leaks in the fixed-link code and a
device reference leak in a phy helper.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/phy/fixed_phy.c | 2 | ||||
-rw-r--r-- | drivers/of/of_mdio.c | 6 |
2 files changed, 6 insertions, 2 deletions
diff --git a/drivers/net/phy/fixed_phy.c b/drivers/net/phy/fixed_phy.c index c649c101bbab..eb5167210681 100644 --- a/drivers/net/phy/fixed_phy.c +++ b/drivers/net/phy/fixed_phy.c @@ -279,7 +279,7 @@ EXPORT_SYMBOL_GPL(fixed_phy_register); void fixed_phy_unregister(struct phy_device *phy) { phy_device_remove(phy); - + of_node_put(phy->mdio.dev.of_node); fixed_phy_del(phy->mdio.addr); } EXPORT_SYMBOL_GPL(fixed_phy_unregister); diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c index b470f7e3521d..5a3145a02547 100644 --- a/drivers/of/of_mdio.c +++ b/drivers/of/of_mdio.c @@ -292,6 +292,7 @@ struct phy_device *of_phy_find_device(struct device_node *phy_np) mdiodev = to_mdio_device(d); if (mdiodev->flags & MDIO_DEVICE_FLAG_PHY) return to_phy_device(d); + put_device(d); } return NULL; @@ -456,8 +457,11 @@ int of_phy_register_fixed_link(struct device_node *np) status.link = 1; status.duplex = of_property_read_bool(fixed_link_node, "full-duplex"); - if (of_property_read_u32(fixed_link_node, "speed", &status.speed)) + if (of_property_read_u32(fixed_link_node, "speed", + &status.speed)) { + of_node_put(fixed_link_node); return -EINVAL; + } status.pause = of_property_read_bool(fixed_link_node, "pause"); status.asym_pause = of_property_read_bool(fixed_link_node, "asym-pause"); |