mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
net: fec: fix the potential memory leak in fec_enet_init()
[ Upstream commit619fee9eb1] If the memory allocated for cbd_base is failed, it should free the memory allocated for the queues, otherwise it causes memory leak. And if the memory allocated for the queues is failed, it can return error directly. Fixes:59d0f74656("net: fec: init multi queue date structure") Signed-off-by: Fugang Duan <fugang.duan@nxp.com> Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
3b985e4dce
commit
15102886bc
@@ -3221,7 +3221,9 @@ static int fec_enet_init(struct net_device *ndev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
fec_enet_alloc_queue(ndev);
|
||||
ret = fec_enet_alloc_queue(ndev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
bd_size = (fep->total_tx_ring_size + fep->total_rx_ring_size) * dsize;
|
||||
|
||||
@@ -3229,7 +3231,8 @@ static int fec_enet_init(struct net_device *ndev)
|
||||
cbd_base = dmam_alloc_coherent(&fep->pdev->dev, bd_size, &bd_dma,
|
||||
GFP_KERNEL);
|
||||
if (!cbd_base) {
|
||||
return -ENOMEM;
|
||||
ret = -ENOMEM;
|
||||
goto free_queue_mem;
|
||||
}
|
||||
|
||||
memset(cbd_base, 0, bd_size);
|
||||
@@ -3309,6 +3312,10 @@ static int fec_enet_init(struct net_device *ndev)
|
||||
fec_enet_update_ethtool_stats(ndev);
|
||||
|
||||
return 0;
|
||||
|
||||
free_queue_mem:
|
||||
fec_enet_free_queue(ndev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
|
||||
Reference in New Issue
Block a user