[libvirt] [PATCH] storage: Fix memory leak in error path
Jiri Denemark
jdenemar at redhat.com
Wed Mar 6 13:00:47 UTC 2013
On Wed, Mar 06, 2013 at 07:35:15 -0500, John Ferlan wrote:
> On 03/06/2013 06:59 AM, Jiri Denemark wrote:
> > This also renames cleanup label as error since it is only used for error
> > path rather then being common for both success and error paths.
> > ---
> > src/storage/storage_backend_logical.c | 15 ++++++++-------
> > 1 file changed, 8 insertions(+), 7 deletions(-)
> >
> > diff --git a/src/storage/storage_backend_logical.c b/src/storage/storage_backend_logical.c
> > index bb709df..e3b3de4 100644
> > --- a/src/storage/storage_backend_logical.c
> > +++ b/src/storage/storage_backend_logical.c
> > @@ -741,10 +741,10 @@ virStorageBackendLogicalCreateVol(virConnectPtr conn,
> > virCommandAddArg(cmd, pool->def->source.name);
> >
> > if (virCommandRun(cmd, NULL) < 0)
> > - goto cleanup;
> > + goto error;
> >
> > if ((fdret = virStorageBackendVolOpen(vol->target.path)) < 0)
> > - goto cleanup;
> > + goto error;
> > fd = fdret;
> >
> > /* We can only chown/grp if root */
> > @@ -753,21 +753,21 @@ virStorageBackendLogicalCreateVol(virConnectPtr conn,
> > virReportSystemError(errno,
> > _("cannot set file owner '%s'"),
> > vol->target.path);
> > - goto cleanup;
> > + goto error;
> > }
> > }
> > if (fchmod(fd, vol->target.perms.mode) < 0) {
> > virReportSystemError(errno,
> > _("cannot set file mode '%s'"),
> > vol->target.path);
> > - goto cleanup;
> > + goto error;
> > }
> >
> > if (VIR_CLOSE(fd) < 0) {
> > virReportSystemError(errno,
> > _("cannot close file '%s'"),
> > vol->target.path);
> > - goto cleanup;
> > + goto error;
> > }
> > fd = -1;
> >
> > @@ -776,17 +776,18 @@ virStorageBackendLogicalCreateVol(virConnectPtr conn,
> > virReportSystemError(errno,
> > _("cannot find newly created volume '%s'"),
> > vol->target.path);
> > - goto cleanup;
> > + goto error;
> > }
> >
> > return 0;
>
> Would we be leaking cmd here?
Indeed. And there are few other places where this function is weird.
I'll send a v2 that cleans them all.
Jirka
More information about the libvir-list
mailing list