net: pasemi: fix an use-after-free in pasemi_mac_phy_init()
authorWen Yang <wen.yang99@zte.com.cn>
Sat, 6 Jul 2019 04:23:41 +0000 (12:23 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 29 Jan 2020 09:24:28 +0000 (10:24 +0100)
[ Upstream commit faf5577f2498cea23011b5c785ef853ded22700b ]

The phy_dn variable is still being used in of_phy_connect() after the
of_node_put() call, which may result in use-after-free.

Fixes: 1dd2d06c0459 ("net: Rework pasemi_mac driver to use of_mdio infrastructure")
Signed-off-by: Wen Yang <wen.yang99@zte.com.cn>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Luis Chamberlain <mcgrof@kernel.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: netdev@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/pasemi/pasemi_mac.c

index 2f4a837f0d6adcb066d6deb952859d6a711026e4..dcd56ac6874823019b4559388da525af033df839 100644 (file)
@@ -1053,7 +1053,6 @@ static int pasemi_mac_phy_init(struct net_device *dev)
 
        dn = pci_device_to_OF_node(mac->pdev);
        phy_dn = of_parse_phandle(dn, "phy-handle", 0);
-       of_node_put(phy_dn);
 
        mac->link = 0;
        mac->speed = 0;
@@ -1062,6 +1061,7 @@ static int pasemi_mac_phy_init(struct net_device *dev)
        phydev = of_phy_connect(dev, phy_dn, &pasemi_adjust_link, 0,
                                PHY_INTERFACE_MODE_SGMII);
 
+       of_node_put(phy_dn);
        if (!phydev) {
                printk(KERN_ERR "%s: Could not attach to phy\n", dev->name);
                return -ENODEV;