On Wed, Jun 03, 2020 at 06:42:10 -0400, John Ferlan wrote:
> First time in a while - Coverity complained this morning
> 
> [...]
> 
> > diff --git a/src/lxc/lxc_fuse.c b/src/lxc/lxc_fuse.c
> > index e73b4d0690..c4223f4e06 100644
> > --- a/src/lxc/lxc_fuse.c
> > +++ b/src/lxc/lxc_fuse.c
> > @@ -326,10 +326,10 @@ int lxcSetupFuse(virLXCFusePtr *f, virDomainDefPtr 
> > def)
> >      *f = fuse;
> 
> ^^
> Event use_after_free: Using freed pointer "fuse".
> Also see events:      [alias][freed_arg]
> 
> >      return ret;
> >   cleanup1:
> > -    VIR_FREE(fuse->mountpoint);
> > +    g_free(fuse->mountpoint);
> >      virMutexDestroy(&fuse->lock);
> >   cleanup2:
> > -    VIR_FREE(fuse);
> > +    g_free(fuse);
> 
> ^^
> Event freed_arg:      "g_free" frees "fuse".
> 
> A fuse = NULL; here will make coverity happy, but not sure if that's
> standard any more... The VIR_FREE would have done thta for us IIRC.

The equivalent replacement for 'VIR_FREE' is
'g_clear_pointer(&ptr, g_free)' as actually done by VIR_FREE nowadays
and not just g_free. The side effect of VIR_FREE, non-equivalence to
g_free combined with the fact that g_clear_pointer is longer makes this
a source of possible nasty bugs.

Reply via email to