compress/mlx5: fix QP setup error flow

Message ID 20210831203941.3411351-1-michaelba@nvidia.com (mailing list archive)
State Accepted, archived
Delegated to: akhil goyal
Headers
Series compress/mlx5: fix QP setup error flow |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/github-robot: build success github build: passed
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-testing success Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS

Commit Message

Michael Baum Aug. 31, 2021, 8:39 p.m. UTC
The QP setup function allocates buffer for its opaque MR and register it
into MR structure.

After buffer alloction and before MR registration, it tries allocate MR
Btree.
When the MR Btree allocation fails, the buffer was not freed what caused
a memory leak.

Allocate the MR Btree before buffer alloction.

Fixes: 0165bccdb45f ("compress/mlx5: add memory region management")
Cc: stable@dpdk.org

Signed-off-by: Michael Baum <michaelba@nvidia.com>
---
 drivers/compress/mlx5/mlx5_compress.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)
  

Comments

Matan Azrad Sept. 1, 2021, 7:47 a.m. UTC | #1
From: Michael Baum <michaelba@nvidia.com>
> Sent: Tuesday, August 31, 2021 11:40 PM
> To: dev@dpdk.org
> Cc: Matan Azrad <matan@nvidia.com>; stable@dpdk.org
> Subject: [PATCH] compress/mlx5: fix QP setup error flow
> 
> The QP setup function allocates buffer for its opaque MR and register it into
> MR structure.
> 
> After buffer alloction and before MR registration, it tries allocate MR Btree.
> When the MR Btree allocation fails, the buffer was not freed what caused a
> memory leak.
> 
> Allocate the MR Btree before buffer alloction.
> 
> Fixes: 0165bccdb45f ("compress/mlx5: add memory region management")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Michael Baum <michaelba@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
  
Akhil Goyal Sept. 2, 2021, 10:14 a.m. UTC | #2
> > The QP setup function allocates buffer for its opaque MR and register it
> into
> > MR structure.
> >
> > After buffer alloction and before MR registration, it tries allocate MR Btree.
> > When the MR Btree allocation fails, the buffer was not freed what caused a
> > memory leak.
> >
> > Allocate the MR Btree before buffer alloction.
> >
> > Fixes: 0165bccdb45f ("compress/mlx5: add memory region management")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Michael Baum <michaelba@nvidia.com>
> Acked-by: Matan Azrad <matan@nvidia.com>

Applied to dpdk-next-crypto

Thanks,
  

Patch

diff --git a/drivers/compress/mlx5/mlx5_compress.c b/drivers/compress/mlx5/mlx5_compress.c
index 883e720ec1..c5e0a83a8c 100644
--- a/drivers/compress/mlx5/mlx5_compress.c
+++ b/drivers/compress/mlx5/mlx5_compress.c
@@ -207,6 +207,13 @@  mlx5_compress_qp_setup(struct rte_compressdev *dev, uint16_t qp_id,
 		return -rte_errno;
 	}
 	dev->data->queue_pairs[qp_id] = qp;
+	if (mlx5_mr_btree_init(&qp->mr_ctrl.cache_bh, MLX5_MR_BTREE_CACHE_N,
+			       priv->dev_config.socket_id)) {
+		DRV_LOG(ERR, "Cannot allocate MR Btree for qp %u.",
+			(uint32_t)qp_id);
+		rte_errno = ENOMEM;
+		goto err;
+	}
 	opaq_buf = rte_calloc(__func__, (size_t)1 << log_ops_n,
 			      sizeof(struct mlx5_gga_compress_opaque),
 			      sizeof(struct mlx5_gga_compress_opaque));
@@ -215,13 +222,6 @@  mlx5_compress_qp_setup(struct rte_compressdev *dev, uint16_t qp_id,
 		rte_errno = ENOMEM;
 		goto err;
 	}
-	if (mlx5_mr_btree_init(&qp->mr_ctrl.cache_bh, MLX5_MR_BTREE_CACHE_N,
-			       priv->dev_config.socket_id)) {
-		DRV_LOG(ERR, "Cannot allocate MR Btree for qp %u.",
-			(uint32_t)qp_id);
-		rte_errno = ENOMEM;
-		goto err;
-	}
 	qp->entries_n = 1 << log_ops_n;
 	qp->socket_id = socket_id;
 	qp->qp_id = qp_id;