
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.