From: Lu Wei <luwe...@huawei.com>

[ Upstream commit 366228ed01f6882cc203e3d5b40010dfae0be1c3 ]

If some processes in nixge_probe() fail, free_netdev(dev)
needs to be called to aviod a memory leak.

Fixes: 87ab207981ec ("net: nixge: Separate ctrl and dma resources")
Fixes: abcd3d6fc640 ("net: nixge: Fix error path for obtaining mac address")
Reported-by: Hulk Robot <hul...@huawei.com>
Signed-off-by: Lu Wei <luwe...@huawei.com>
Signed-off-by: David S. Miller <da...@davemloft.net>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 drivers/net/ethernet/ni/nixge.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/ni/nixge.c b/drivers/net/ethernet/ni/nixge.c
index 2761f3a3ae508..56f285985b432 100644
--- a/drivers/net/ethernet/ni/nixge.c
+++ b/drivers/net/ethernet/ni/nixge.c
@@ -1318,19 +1318,21 @@ static int nixge_probe(struct platform_device *pdev)
        netif_napi_add(ndev, &priv->napi, nixge_poll, NAPI_POLL_WEIGHT);
        err = nixge_of_get_resources(pdev);
        if (err)
-               return err;
+               goto free_netdev;
        __nixge_hw_set_mac_address(ndev);
 
        priv->tx_irq = platform_get_irq_byname(pdev, "tx");
        if (priv->tx_irq < 0) {
                netdev_err(ndev, "could not find 'tx' irq");
-               return priv->tx_irq;
+               err = priv->tx_irq;
+               goto free_netdev;
        }
 
        priv->rx_irq = platform_get_irq_byname(pdev, "rx");
        if (priv->rx_irq < 0) {
                netdev_err(ndev, "could not find 'rx' irq");
-               return priv->rx_irq;
+               err = priv->rx_irq;
+               goto free_netdev;
        }
 
        priv->coalesce_count_rx = XAXIDMA_DFT_RX_THRESHOLD;
-- 
2.25.1



Reply via email to