[dpdk-stable] [dpdk-dev] [PATCH] baseband/turbo_sw: fix memory leak in error path
wangyunjian
wangyunjian at huawei.com
Thu Oct 15 14:50:31 CEST 2020
> -----Original Message-----
> From: Chautru, Nicolas [mailto:nicolas.chautru at intel.com]
> Sent: Thursday, October 8, 2020 7:45 AM
> To: wangyunjian <wangyunjian at huawei.com>; dev at dpdk.org
> Cc: Lilijun (Jerry) <jerry.lilijun at huawei.com>; xudingke
> <xudingke at huawei.com>; stable at dpdk.org
> Subject: RE: [dpdk-dev] [PATCH] baseband/turbo_sw: fix memory leak in error
> path
>
> Hi wangyunjian,
>
> > -----Original Message-----
> > From: wangyunjian <wangyunjian at huawei.com>
> > Sent: Wednesday, October 7, 2020 2:04 AM
> > To: dev at dpdk.org
> > Cc: Chautru, Nicolas <nicolas.chautru at intel.com>;
> > jerry.lilijun at huawei.com; xudingke at huawei.com; Yunjian Wang
> > <wangyunjian at huawei.com>; stable at dpdk.org
> > Subject: [dpdk-dev] [PATCH] baseband/turbo_sw: fix memory leak in
> > error path
> >
> > From: Yunjian Wang <wangyunjian at huawei.com>
> >
> > In q_setup() allocated memory for the queue data, we should free it
> > when error happens, otherwise it will lead to memory leak.
> >
> > Fixes: b8cfe2c9aed2 ("bb/turbo_sw: add software turbo driver")
> > Cc: stable at dpdk.org
> >
> > Signed-off-by: Yunjian Wang <wangyunjian at huawei.com>
> > ---
> > drivers/baseband/turbo_sw/bbdev_turbo_software.c | 16
> > ++++++++--------
> > 1 file changed, 8 insertions(+), 8 deletions(-)
> >
> > diff --git a/drivers/baseband/turbo_sw/bbdev_turbo_software.c
> > b/drivers/baseband/turbo_sw/bbdev_turbo_software.c
> > index a36099e91..e55b32927 100644
> > --- a/drivers/baseband/turbo_sw/bbdev_turbo_software.c
> > +++ b/drivers/baseband/turbo_sw/bbdev_turbo_software.c
> > @@ -302,7 +302,7 @@ q_setup(struct rte_bbdev *dev, uint16_t q_id,
> > rte_bbdev_log(ERR,
> > "Creating queue name for device %u queue %u failed",
> > dev->data->dev_id, q_id);
> > - return -ENAMETOOLONG;
> > + goto free_q;
>
> It may be better to move the freeing into a common function and return the
> relevant failure ENUM for each failure reason.
> With the proposed changed it would always return EFAULT to application.
>
> For information did you ever catch that exception from actually running the
> code or purely from code review? I struggle to see that error genuinely
> happening.
By code review. I will fix return code in the next version.
Thanks,
Yunjian
>
> Thanks,
> Nic
>
> > }
> > q->enc_out = rte_zmalloc_socket(name,
> > ((RTE_BBDEV_TURBO_MAX_TB_SIZE >> 3) + 3) * @@
> > -322,7 +322,7 @@ q_setup(struct rte_bbdev *dev, uint16_t q_id,
> > rte_bbdev_log(ERR,
> > "Creating queue name for device %u queue %u failed",
> > dev->data->dev_id, q_id);
> > - return -ENAMETOOLONG;
> > + goto free_q;
> > }
> > q->enc_in = rte_zmalloc_socket(name,
> > (RTE_BBDEV_LDPC_MAX_CB_SIZE >> 3) * sizeof(*q-
> > >enc_in), @@ -340,7 +340,7 @@ q_setup(struct rte_bbdev *dev, uint16_t
> > q_id,
> > rte_bbdev_log(ERR,
> > "Creating queue name for device %u queue %u failed",
> > dev->data->dev_id, q_id);
> > - return -ENAMETOOLONG;
> > + goto free_q;
> > }
> > q->ag = rte_zmalloc_socket(name,
> > RTE_BBDEV_TURBO_MAX_CB_SIZE * 10 * sizeof(*q-
> > >ag), @@ -358,7 +358,7 @@ q_setup(struct rte_bbdev *dev, uint16_t
> > >q_id,
> > rte_bbdev_log(ERR,
> > "Creating queue name for device %u queue %u failed",
> > dev->data->dev_id, q_id);
> > - return -ENAMETOOLONG;
> > + goto free_q;
> > }
> > q->code_block = rte_zmalloc_socket(name,
> > RTE_BBDEV_TURBO_MAX_CB_SIZE * sizeof(*q-
> > >code_block), @@ -377,7 +377,7 @@ q_setup(struct rte_bbdev *dev,
> > uint16_t q_id,
> > rte_bbdev_log(ERR,
> > "Creating queue name for device %u queue %u failed",
> > dev->data->dev_id, q_id);
> > - return -ENAMETOOLONG;
> > + goto free_q;
> > }
> > q->deint_input = rte_zmalloc_socket(name,
> > DEINT_INPUT_BUF_SIZE * sizeof(*q->deint_input), @@ -396,7
> +396,7
> > @@ q_setup(struct rte_bbdev *dev, uint16_t q_id,
> > rte_bbdev_log(ERR,
> > "Creating queue name for device %u queue %u failed",
> > dev->data->dev_id, q_id);
> > - return -ENAMETOOLONG;
> > + goto free_q;
> > }
> > q->deint_output = rte_zmalloc_socket(NULL,
> > DEINT_OUTPUT_BUF_SIZE * sizeof(*q-
> > >deint_output), @@ -415,7 +415,7 @@ q_setup(struct rte_bbdev *dev,
> > uint16_t q_id,
> > rte_bbdev_log(ERR,
> > "Creating queue name for device %u queue %u failed",
> > dev->data->dev_id, q_id);
> > - return -ENAMETOOLONG;
> > + goto free_q;
> > }
> > q->adapter_output = rte_zmalloc_socket(NULL,
> > ADAPTER_OUTPUT_BUF_SIZE * sizeof(*q-
> > >adapter_output), @@ -433,7 +433,7 @@ q_setup(struct rte_bbdev *dev,
> > uint16_t q_id,
> > rte_bbdev_log(ERR,
> > "Creating queue name for device %u queue %u failed",
> > dev->data->dev_id, q_id);
> > - return -ENAMETOOLONG;
> > + goto free_q;
> > }
> > q->processed_pkts = rte_ring_create(name, queue_conf-
> > >queue_size,
> > queue_conf->socket, RING_F_SP_ENQ | RING_F_SC_DEQ);
> > --
> > 2.23.0
More information about the stable
mailing list