|
Denis Kirjanov |
3c37ef |
From d8f7942cdc53e4af192760820a0d087cdfdd280f Mon Sep 17 00:00:00 2001
|
|
Denis Kirjanov |
3c37ef |
From: Fugang Duan <fugang.duan@nxp.com>
|
|
Denis Kirjanov |
3c37ef |
Date: Wed, 12 May 2021 10:43:59 +0800
|
|
Denis Kirjanov |
3c37ef |
Subject: [PATCH 04/16] net: fec: fix the potential memory leak in
|
|
Denis Kirjanov |
3c37ef |
fec_enet_init()
|
|
Denis Kirjanov |
3c37ef |
Git-commit: 619fee9eb13b5d29e4267cb394645608088c28a8
|
|
Denis Kirjanov |
3c37ef |
Patch-mainline: v5.13-rc4
|
|
Denis Kirjanov |
3c37ef |
References: git-fixes
|
|
Denis Kirjanov |
3c37ef |
|
|
Denis Kirjanov |
3c37ef |
If the memory allocated for cbd_base is failed, it should
|
|
Denis Kirjanov |
3c37ef |
free the memory allocated for the queues, otherwise it causes
|
|
Denis Kirjanov |
3c37ef |
memory leak.
|
|
Denis Kirjanov |
3c37ef |
|
|
Denis Kirjanov |
3c37ef |
And if the memory allocated for the queues is failed, it can
|
|
Denis Kirjanov |
3c37ef |
return error directly.
|
|
Denis Kirjanov |
3c37ef |
|
|
Denis Kirjanov |
3c37ef |
Fixes: 59d0f7465644 ("net: fec: init multi queue date structure")
|
|
Denis Kirjanov |
3c37ef |
Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
|
|
Denis Kirjanov |
3c37ef |
Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>
|
|
Denis Kirjanov |
3c37ef |
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
Denis Kirjanov |
3c37ef |
Signed-off-by: Denis Kirjanov <denis.kirjanov@suse.com>
|
|
Denis Kirjanov |
3c37ef |
---
|
|
Denis Kirjanov |
3c37ef |
drivers/net/ethernet/freescale/fec_main.c | 11 +++++++++--
|
|
Denis Kirjanov |
3c37ef |
1 file changed, 9 insertions(+), 2 deletions(-)
|
|
Denis Kirjanov |
3c37ef |
|
|
Denis Kirjanov |
3c37ef |
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
|
|
Denis Kirjanov |
3c37ef |
index 70a5039faa89..fa0a9df96ba0 100644
|
|
Denis Kirjanov |
3c37ef |
--- a/drivers/net/ethernet/freescale/fec_main.c
|
|
Denis Kirjanov |
3c37ef |
+++ b/drivers/net/ethernet/freescale/fec_main.c
|
|
Denis Kirjanov |
3c37ef |
@@ -3175,7 +3175,9 @@ static int fec_enet_init(struct net_device *ndev)
|
|
Denis Kirjanov |
3c37ef |
return ret;
|
|
Denis Kirjanov |
3c37ef |
}
|
|
Denis Kirjanov |
3c37ef |
|
|
Denis Kirjanov |
3c37ef |
- fec_enet_alloc_queue(ndev);
|
|
Denis Kirjanov |
3c37ef |
+ ret = fec_enet_alloc_queue(ndev);
|
|
Denis Kirjanov |
3c37ef |
+ if (ret)
|
|
Denis Kirjanov |
3c37ef |
+ return ret;
|
|
Denis Kirjanov |
3c37ef |
|
|
Denis Kirjanov |
3c37ef |
bd_size = (fep->total_tx_ring_size + fep->total_rx_ring_size) * dsize;
|
|
Denis Kirjanov |
3c37ef |
|
|
Denis Kirjanov |
3c37ef |
@@ -3183,7 +3185,8 @@ static int fec_enet_init(struct net_device *ndev)
|
|
Denis Kirjanov |
3c37ef |
cbd_base = dmam_alloc_coherent(&fep->pdev->dev, bd_size, &bd_dma,
|
|
Denis Kirjanov |
3c37ef |
GFP_KERNEL);
|
|
Denis Kirjanov |
3c37ef |
if (!cbd_base) {
|
|
Denis Kirjanov |
3c37ef |
- return -ENOMEM;
|
|
Denis Kirjanov |
3c37ef |
+ ret = -ENOMEM;
|
|
Denis Kirjanov |
3c37ef |
+ goto free_queue_mem;
|
|
Denis Kirjanov |
3c37ef |
}
|
|
Denis Kirjanov |
3c37ef |
|
|
Denis Kirjanov |
3c37ef |
memset(cbd_base, 0, bd_size);
|
|
Denis Kirjanov |
3c37ef |
@@ -3260,6 +3263,10 @@ static int fec_enet_init(struct net_device *ndev)
|
|
Denis Kirjanov |
3c37ef |
fec_enet_update_ethtool_stats(ndev);
|
|
Denis Kirjanov |
3c37ef |
|
|
Denis Kirjanov |
3c37ef |
return 0;
|
|
Denis Kirjanov |
3c37ef |
+
|
|
Denis Kirjanov |
3c37ef |
+free_queue_mem:
|
|
Denis Kirjanov |
3c37ef |
+ fec_enet_free_queue(ndev);
|
|
Denis Kirjanov |
3c37ef |
+ return ret;
|
|
Denis Kirjanov |
3c37ef |
}
|
|
Denis Kirjanov |
3c37ef |
|
|
Denis Kirjanov |
3c37ef |
#ifdef CONFIG_OF
|
|
Denis Kirjanov |
3c37ef |
--
|
|
Denis Kirjanov |
3c37ef |
2.16.4
|
|
Denis Kirjanov |
3c37ef |
|