| From d260e5fc3031312fdb5cdbeb7894ec4cd2a67a6d Mon Sep 17 00:00:00 2001 |
| From: Wenwen Wang <wenwen@cs.uga.edu> |
| Date: Sun, 18 Aug 2019 15:23:01 -0500 |
| Subject: IB/mlx4: Fix memory leaks |
| |
| [ Upstream commit 5c1baaa82cea2c815a5180ded402a7cd455d1810 ] |
| |
| In mlx4_ib_alloc_pv_bufs(), 'tun_qp->tx_ring' is allocated through |
| kcalloc(). However, it is not always deallocated in the following execution |
| if an error occurs, leading to memory leaks. To fix this issue, free |
| 'tun_qp->tx_ring' whenever an error occurs. |
| |
| Signed-off-by: Wenwen Wang <wenwen@cs.uga.edu> |
| Acked-by: Leon Romanovsky <leonro@mellanox.com> |
| Link: https://lore.kernel.org/r/1566159781-4642-1-git-send-email-wenwen@cs.uga.edu |
| Signed-off-by: Doug Ledford <dledford@redhat.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/infiniband/hw/mlx4/mad.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/infiniband/hw/mlx4/mad.c b/drivers/infiniband/hw/mlx4/mad.c |
| index d9323d7c479c3..f32ffd74ec476 100644 |
| --- a/drivers/infiniband/hw/mlx4/mad.c |
| +++ b/drivers/infiniband/hw/mlx4/mad.c |
| @@ -1643,8 +1643,6 @@ tx_err: |
| tx_buf_size, DMA_TO_DEVICE); |
| kfree(tun_qp->tx_ring[i].buf.addr); |
| } |
| - kfree(tun_qp->tx_ring); |
| - tun_qp->tx_ring = NULL; |
| i = MLX4_NUM_TUNNEL_BUFS; |
| err: |
| while (i > 0) { |
| @@ -1653,6 +1651,8 @@ err: |
| rx_buf_size, DMA_FROM_DEVICE); |
| kfree(tun_qp->ring[i].addr); |
| } |
| + kfree(tun_qp->tx_ring); |
| + tun_qp->tx_ring = NULL; |
| kfree(tun_qp->ring); |
| tun_qp->ring = NULL; |
| return -ENOMEM; |
| -- |
| 2.20.1 |
| |