All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ethernet: fman: add missing put_device() call in mac_probe()
@ 2021-12-07 12:56 Qing Wang
  2021-12-09  2:29 ` Jakub Kicinski
  0 siblings, 1 reply; 2+ messages in thread
From: Qing Wang @ 2021-12-07 12:56 UTC (permalink / raw)
  To: Madalin Bucur, David S. Miller, Jakub Kicinski, netdev, linux-kernel
  Cc: Wang Qing

From: Wang Qing <wangqing@vivo.com>

of_find_device_by_node() takes a reference to the embedded struct device 
which needs to be dropped when error return.

Add a jump target to fix the exception handling for this 
function implementation.

Signed-off-by: Wang Qing <wangqing@vivo.com>
---
 drivers/net/ethernet/freescale/fman/mac.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/freescale/fman/mac.c b/drivers/net/ethernet/freescale/fman/mac.c
index d9fc5c4..5180121
--- a/drivers/net/ethernet/freescale/fman/mac.c
+++ b/drivers/net/ethernet/freescale/fman/mac.c
@@ -668,7 +668,7 @@ static int mac_probe(struct platform_device *_of_dev)
 	if (err) {
 		dev_err(dev, "failed to read cell-index for %pOF\n", dev_node);
 		err = -EINVAL;
-		goto _return_of_node_put;
+		goto _return_of_put_device;
 	}
 	/* cell-index 0 => FMan id 1 */
 	fman_id = (u8)(val + 1);
@@ -677,7 +677,7 @@ static int mac_probe(struct platform_device *_of_dev)
 	if (!priv->fman) {
 		dev_err(dev, "fman_bind(%pOF) failed\n", dev_node);
 		err = -ENODEV;
-		goto _return_of_node_put;
+		goto _return_of_put_device;
 	}
 
 	of_node_put(dev_node);
@@ -758,7 +758,7 @@ static int mac_probe(struct platform_device *_of_dev)
 			dev_err(dev, "of_find_device_by_node(%pOF) failed\n",
 				dev_node);
 			err = -EINVAL;
-			goto _return_of_node_put;
+			goto _return_of_put_device;
 		}
 
 		mac_dev->port[i] = fman_port_bind(&of_dev->dev);
@@ -766,7 +766,7 @@ static int mac_probe(struct platform_device *_of_dev)
 			dev_err(dev, "dev_get_drvdata(%pOF) failed\n",
 				dev_node);
 			err = -EINVAL;
-			goto _return_of_node_put;
+			goto _return_of_put_device;
 		}
 		of_node_put(dev_node);
 	}
@@ -863,6 +863,8 @@ static int mac_probe(struct platform_device *_of_dev)
 
 	goto _return;
 
+_return_of_put_device:
+	put_device(&of_dev->dev);
 _return_of_node_put:
 	of_node_put(dev_node);
 _return_of_get_parent:
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] ethernet: fman: add missing put_device() call in mac_probe()
  2021-12-07 12:56 [PATCH] ethernet: fman: add missing put_device() call in mac_probe() Qing Wang
@ 2021-12-09  2:29 ` Jakub Kicinski
  0 siblings, 0 replies; 2+ messages in thread
From: Jakub Kicinski @ 2021-12-09  2:29 UTC (permalink / raw)
  To: Qing Wang; +Cc: Madalin Bucur, David S. Miller, netdev

On Tue,  7 Dec 2021 04:56:00 -0800 Qing Wang wrote:
> From: Wang Qing <wangqing@vivo.com>
> 
> of_find_device_by_node() takes a reference to the embedded struct device 
> which needs to be dropped when error return.
> 
> Add a jump target to fix the exception handling for this 
> function implementation.
> 
> Signed-off-by: Wang Qing <wangqing@vivo.com>

The entire mac_dev->port[] handling seems entirely pointless and leaky. 
Nothing ever reads the mac_dev->port array. We should remove it
completely.

> diff --git a/drivers/net/ethernet/freescale/fman/mac.c b/drivers/net/ethernet/freescale/fman/mac.c
> index d9fc5c4..5180121
> --- a/drivers/net/ethernet/freescale/fman/mac.c
> +++ b/drivers/net/ethernet/freescale/fman/mac.c
> @@ -668,7 +668,7 @@ static int mac_probe(struct platform_device *_of_dev)
>  	if (err) {
>  		dev_err(dev, "failed to read cell-index for %pOF\n", dev_node);
>  		err = -EINVAL;
> -		goto _return_of_node_put;
> +		goto _return_of_put_device;
>  	}
>  	/* cell-index 0 => FMan id 1 */
>  	fman_id = (u8)(val + 1);
> @@ -677,7 +677,7 @@ static int mac_probe(struct platform_device *_of_dev)
>  	if (!priv->fman) {
>  		dev_err(dev, "fman_bind(%pOF) failed\n", dev_node);
>  		err = -ENODEV;
> -		goto _return_of_node_put;
> +		goto _return_of_put_device;
>  	}
>  
>  	of_node_put(dev_node);
> @@ -758,7 +758,7 @@ static int mac_probe(struct platform_device *_of_dev)
>  			dev_err(dev, "of_find_device_by_node(%pOF) failed\n",
>  				dev_node);
>  			err = -EINVAL;
> -			goto _return_of_node_put;
> +			goto _return_of_put_device;
>  		}
>  
>  		mac_dev->port[i] = fman_port_bind(&of_dev->dev);
> @@ -766,7 +766,7 @@ static int mac_probe(struct platform_device *_of_dev)
>  			dev_err(dev, "dev_get_drvdata(%pOF) failed\n",
>  				dev_node);
>  			err = -EINVAL;
> -			goto _return_of_node_put;
> +			goto _return_of_put_device;
>  		}
>  		of_node_put(dev_node);
>  	}
> @@ -863,6 +863,8 @@ static int mac_probe(struct platform_device *_of_dev)
>  
>  	goto _return;
>  
> +_return_of_put_device:
> +	put_device(&of_dev->dev);
>  _return_of_node_put:
>  	of_node_put(dev_node);
>  _return_of_get_parent:


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-12-09  2:29 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-07 12:56 [PATCH] ethernet: fman: add missing put_device() call in mac_probe() Qing Wang
2021-12-09  2:29 ` Jakub Kicinski

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.