diff mbox series

[v2,2/3] net: phy: fixed_phy: fix use-after-free when checking link GPIO

Message ID 20191014174022.94605-3-dmitry.torokhov@gmail.com
State Not Applicable
Delegated to: David Miller
Headers show
Series net: phy: switch to using fwnode_gpiod_get_index | expand

Commit Message

Dmitry Torokhov Oct. 14, 2019, 5:40 p.m. UTC
If we fail to locate GPIO for any reason other than deferral or
not-found-GPIO, we try to print device tree node info, however if might
be freed already as we called of_node_put() on it.

Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---

 drivers/net/phy/fixed_phy.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

Comments

Andrew Lunn Oct. 15, 2019, 12:54 p.m. UTC | #1
On Mon, Oct 14, 2019 at 10:40:21AM -0700, Dmitry Torokhov wrote:
> If we fail to locate GPIO for any reason other than deferral or
> not-found-GPIO, we try to print device tree node info, however if might
> be freed already as we called of_node_put() on it.
> 
> Acked-by: David S. Miller <davem@davemloft.net>
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew
diff mbox series

Patch

diff --git a/drivers/net/phy/fixed_phy.c b/drivers/net/phy/fixed_phy.c
index 7c5265fd2b94..4190f9ed5313 100644
--- a/drivers/net/phy/fixed_phy.c
+++ b/drivers/net/phy/fixed_phy.c
@@ -212,16 +212,13 @@  static struct gpio_desc *fixed_phy_get_gpiod(struct device_node *np)
 	 */
 	gpiod = gpiod_get_from_of_node(fixed_link_node, "link-gpios", 0,
 				       GPIOD_IN, "mdio");
-	of_node_put(fixed_link_node);
-	if (IS_ERR(gpiod)) {
-		if (PTR_ERR(gpiod) == -EPROBE_DEFER)
-			return gpiod;
-
+	if (IS_ERR(gpiod) && PTR_ERR(gpiod) != -EPROBE_DEFER) {
 		if (PTR_ERR(gpiod) != -ENOENT)
 			pr_err("error getting GPIO for fixed link %pOF, proceed without\n",
 			       fixed_link_node);
 		gpiod = NULL;
 	}
+	of_node_put(fixed_link_node);
 
 	return gpiod;
 }