Denis Kirjanov 0674aa
From 998ed7803a82be29fbe7ea7640c407bc864323ac Mon Sep 17 00:00:00 2001
Denis Kirjanov 0674aa
From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Denis Kirjanov 0674aa
Date: Mon, 27 Apr 2020 08:18:03 +0200
Denis Kirjanov 0674aa
Subject: [PATCH 5/8] net/sonic: Fix a resource leak in an error handling path
Denis Kirjanov 0674aa
 in 'jazz_sonic_probe()'
Denis Kirjanov 0674aa
Git-commit: 10e3cc180e64385edc9890c6855acf5ed9ca1339
Denis Kirjanov 0674aa
Patch-mainline: v5.7-rc5
Denis Kirjanov 0674aa
References: git-fixes
Denis Kirjanov 0674aa
Denis Kirjanov 0674aa
A call to 'dma_alloc_coherent()' is hidden in 'sonic_alloc_descriptors()',
Denis Kirjanov 0674aa
called from 'sonic_probe1()'.
Denis Kirjanov 0674aa
Denis Kirjanov 0674aa
This is correctly freed in the remove function, but not in the error
Denis Kirjanov 0674aa
handling path of the probe function.
Denis Kirjanov 0674aa
Fix it and add the missing 'dma_free_coherent()' call.
Denis Kirjanov 0674aa
Denis Kirjanov 0674aa
While at it, rename a label in order to be slightly more informative.
Denis Kirjanov 0674aa
Denis Kirjanov 0674aa
Fixes: efcce839360f ("[PATCH] macsonic/jazzsonic network drivers update")
Denis Kirjanov 0674aa
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Denis Kirjanov 0674aa
Signed-off-by: David S. Miller <davem@davemloft.net>
Denis Kirjanov 0674aa
Signed-off-by: Denis Kirjanov <denis.kirjanov@suse.com>
Denis Kirjanov 0674aa
---
Denis Kirjanov 0674aa
 drivers/net/ethernet/natsemi/jazzsonic.c | 6 ++++--
Denis Kirjanov 0674aa
 1 file changed, 4 insertions(+), 2 deletions(-)
Denis Kirjanov 0674aa
Denis Kirjanov 0674aa
diff --git a/drivers/net/ethernet/natsemi/jazzsonic.c b/drivers/net/ethernet/natsemi/jazzsonic.c
Denis Kirjanov 0674aa
index a6caeb567c0d..2bf2b0314ca9 100644
Denis Kirjanov 0674aa
--- a/drivers/net/ethernet/natsemi/jazzsonic.c
Denis Kirjanov 0674aa
+++ b/drivers/net/ethernet/natsemi/jazzsonic.c
Denis Kirjanov 0674aa
@@ -246,13 +246,15 @@ static int jazz_sonic_probe(struct platform_device *pdev)
Denis Kirjanov 0674aa
 		goto out;
Denis Kirjanov 0674aa
 	err = register_netdev(dev);
Denis Kirjanov 0674aa
 	if (err)
Denis Kirjanov 0674aa
-		goto out1;
Denis Kirjanov 0674aa
+		goto undo_probe1;
Denis Kirjanov 0674aa
 
Denis Kirjanov 0674aa
 	printk("%s: MAC %pM IRQ %d\n", dev->name, dev->dev_addr, dev->irq);
Denis Kirjanov 0674aa
 
Denis Kirjanov 0674aa
 	return 0;
Denis Kirjanov 0674aa
 
Denis Kirjanov 0674aa
-out1:
Denis Kirjanov 0674aa
+undo_probe1:
Denis Kirjanov 0674aa
+	dma_free_coherent(lp->device, SIZEOF_SONIC_DESC * SONIC_BUS_SCALE(lp->dma_bitmode),
Denis Kirjanov 0674aa
+			  lp->descriptors, lp->descriptors_laddr);
Denis Kirjanov 0674aa
 	release_mem_region(dev->base_addr, SONIC_MEM_SIZE);
Denis Kirjanov 0674aa
 out:
Denis Kirjanov 0674aa
 	free_netdev(dev);
Denis Kirjanov 0674aa
-- 
Denis Kirjanov 0674aa
2.16.4
Denis Kirjanov 0674aa