octeontx2-pf: Fix a memleak otx2_sq_init

Message ID 20240201124714.3053525-1-alexious@zju.edu.cn
State New
Headers
Series octeontx2-pf: Fix a memleak otx2_sq_init |

Commit Message

Zhipeng Lu Feb. 1, 2024, 12:47 p.m. UTC
  When qmem_alloc and pfvf->hw_ops->sq_aq_init fails, sq->sg should be
freed to prevent memleak.

Fixes: c9c12d339d93 ("octeontx2-pf: Add support for PTP clock")
Signed-off-by: Zhipeng Lu <alexious@zju.edu.cn>
---
 .../ethernet/marvell/octeontx2/nic/otx2_common.c   | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)
  

Comments

patchwork-bot+netdevbpf@kernel.org Feb. 3, 2024, 12:50 p.m. UTC | #1
Hello:

This patch was applied to netdev/net.git (main)
by David S. Miller <davem@davemloft.net>:

On Thu,  1 Feb 2024 20:47:13 +0800 you wrote:
> When qmem_alloc and pfvf->hw_ops->sq_aq_init fails, sq->sg should be
> freed to prevent memleak.
> 
> Fixes: c9c12d339d93 ("octeontx2-pf: Add support for PTP clock")
> Signed-off-by: Zhipeng Lu <alexious@zju.edu.cn>
> ---
>  .../ethernet/marvell/octeontx2/nic/otx2_common.c   | 14 ++++++++++++--
>  1 file changed, 12 insertions(+), 2 deletions(-)

Here is the summary with links:
  - octeontx2-pf: Fix a memleak otx2_sq_init
    https://git.kernel.org/netdev/net/c/b09b58e31b0f

You are awesome, thank you!
  

Patch

diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
index 7ca6941ea0b9..02d0b707aea5 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c
@@ -951,8 +951,11 @@  int otx2_sq_init(struct otx2_nic *pfvf, u16 qidx, u16 sqb_aura)
 	if (pfvf->ptp && qidx < pfvf->hw.tx_queues) {
 		err = qmem_alloc(pfvf->dev, &sq->timestamps, qset->sqe_cnt,
 				 sizeof(*sq->timestamps));
-		if (err)
+		if (err) {
+			kfree(sq->sg);
+			sq->sg = NULL;
 			return err;
+		}
 	}
 
 	sq->head = 0;
@@ -968,7 +971,14 @@  int otx2_sq_init(struct otx2_nic *pfvf, u16 qidx, u16 sqb_aura)
 	sq->stats.bytes = 0;
 	sq->stats.pkts = 0;
 
-	return pfvf->hw_ops->sq_aq_init(pfvf, qidx, sqb_aura);
+	err = pfvf->hw_ops->sq_aq_init(pfvf, qidx, sqb_aura);
+	if (err) {
+		kfree(sq->sg);
+		sq->sg = NULL;
+		return err;
+	}
+
+	return 0;
 
 }