[dpdk-dev] [PATCH v3 1/2] eal: fix memory leak when removing event_cb

wangyunjian wangyunjian at huawei.com
Fri Jul 3 09:00:53 CEST 2020


Hi, Jeff

> -----Original Message-----
> From: Jeff Guo [mailto:jia.guo at intel.com]
> Sent: Friday, July 3, 2020 2:05 PM
> 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 v3 1/2] eal: fix memory leak when removing
> event_cb
> 
> hi, yunjian
> 
> On 7/2/2020 7:47 PM, wangyunjian wrote:
> > From: Yunjian Wang <wangyunjian at huawei.com>
> >
> > The event_cb->dev_name is not freed when freeing event_cb, and this
> > causes a memory leak.
> >
> > Fixes: a753e53d517b ("eal: add device event monitor framework")
> > Cc: stable at dpdk.org
> >
> > Signed-off-by: Yunjian Wang <wangyunjian at huawei.com>
> > ---
> >   lib/librte_eal/common/eal_common_dev.c | 2 ++
> >   1 file changed, 2 insertions(+)
> >
> > diff --git a/lib/librte_eal/common/eal_common_dev.c
> > b/lib/librte_eal/common/eal_common_dev.c
> > index 9e4f09d..4cfdb80 100644
> > --- a/lib/librte_eal/common/eal_common_dev.c
> > +++ b/lib/librte_eal/common/eal_common_dev.c
> > @@ -526,6 +526,8 @@ static int cmp_dev_name(const struct rte_device
> *dev, const void *_name)
> >   		 */
> >   		if (event_cb->active == 0) {
> >   			TAILQ_REMOVE(&dev_event_cbs, event_cb, next);
> > +			if (event_cb->dev_name)
> > +				free(event_cb->dev_name);
> >   			free(event_cb);
> >   			ret++;
> >   		} else {
> 
> 
> After you check, don't you think the memory leak would not occur in
> rte_dev_event_callback_register when free event_cb? And if you have find
> other same problem, suggest to fix it wholly by this good chance. Thanks.
> 

Yes, I've confirmed that it's not necessary. The 'event_cb->dev_name' is not allocated
memory on error path in rte_dev_event_callback_register(). But I find the return value
is wrong, when the callback is already exist, will include it in next version.

The similar bugs I found in other codes will be fixed in another patches.

Thanks,
Yunjian

> int
> rte_dev_event_callback_register(const char *device_name,
>                  rte_dev_event_cb_fn cb_fn,
>                  void *cb_arg)
> {
> 
> error:
>      free(event_cb);
>      rte_spinlock_unlock(&dev_event_lock);
>      return ret;
> 
> }



More information about the dev mailing list