RE: [EXT] [PATCH] octeontx2-pf: Fix a memleak otx2_sq_init

From: Subbaraya Sundeep Bhatta
Date: Fri Feb 02 2024 - 00:04:24 EST


Looks good to me.

Thanks,
Sundeep

>-----Original Message-----
>From: Zhipeng Lu <alexious@xxxxxxxxxx>
>Sent: Thursday, February 1, 2024 6:17 PM
>To: alexious@xxxxxxxxxx
>Cc: Sunil Kovvuri Goutham <sgoutham@xxxxxxxxxxx>; Geethasowjanya Akula
><gakula@xxxxxxxxxxx>; Subbaraya Sundeep Bhatta <sbhatta@xxxxxxxxxxx>;
>Hariprasad Kelam <hkelam@xxxxxxxxxxx>; David S. Miller
><davem@xxxxxxxxxxxxx>; Eric Dumazet <edumazet@xxxxxxxxxx>; Jakub Kicinski
><kuba@xxxxxxxxxx>; Paolo Abeni <pabeni@xxxxxxxxxx>; Jesse Brandeburg
><jesse.brandeburg@xxxxxxxxx>; Richard Cochran <richardcochran@xxxxxxxxx>;
>netdev@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
>Subject: [EXT] [PATCH] octeontx2-pf: Fix a memleak otx2_sq_init
>
>External Email
>
>----------------------------------------------------------------------
>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@xxxxxxxxxx>
>---
> .../ethernet/marvell/octeontx2/nic/otx2_common.c | 14 ++++++++++++--
> 1 file changed, 12 insertions(+), 2 deletions(-)
>
>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;
>
> }
>
>--
>2.34.1