Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 15102886 authored by Fugang Duan's avatar Fugang Duan Committed by Greg Kroah-Hartman
Browse files

net: fec: fix the potential memory leak in fec_enet_init()



[ Upstream commit 619fee9eb13b5d29e4267cb394645608088c28a8 ]

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: 59d0f746 ("net: fec: init multi queue date structure")
Signed-off-by: default avatarFugang Duan <fugang.duan@nxp.com>
Signed-off-by: default avatarJoakim Zhang <qiangqing.zhang@nxp.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 3b985e4d
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -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