[libvirt] [PATCH 09/17] Fix leak in qemuParseCommandLineDisk on OOM
Daniel P. Berrange
berrange at redhat.com
Wed Sep 25 08:21:50 UTC 2013
On Tue, Sep 24, 2013 at 04:24:43PM -0500, Doug Goldstein wrote:
> On Tue, Sep 24, 2013 at 11:03 AM, Daniel P. Berrange
> <berrange at redhat.com> wrote:
> > From: "Daniel P. Berrange" <berrange at redhat.com>
> >
> > If OOM occurs in qemuParseCommandLineDisk some intermediate
> > variables will be leaked when parsing Sheepdog or RBD disks.
> >
> > Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> > ---
> > src/qemu/qemu_command.c | 17 ++++++++++-------
> > 1 file changed, 10 insertions(+), 7 deletions(-)
> >
> > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> > index a82c5dd..f6a3aa2 100644
> > --- a/src/qemu/qemu_command.c
> > +++ b/src/qemu/qemu_command.c
> > @@ -9935,8 +9935,10 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt,
> > if (VIR_STRDUP(def->src, p + strlen("rbd:")) < 0)
> > goto error;
> > /* old-style CEPH_ARGS env variable is parsed later */
> > - if (!old_style_ceph_args && qemuParseRBDString(def) < 0)
> > - goto cleanup;
> > + if (!old_style_ceph_args && qemuParseRBDString(def) < 0) {
> > + VIR_FREE(p);
> > + goto error;
> > + }
> >
> > VIR_FREE(p);
> > } else if (STRPREFIX(def->src, "gluster:") ||
> > @@ -9960,17 +9962,20 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt,
> > def->protocol = VIR_DOMAIN_DISK_PROTOCOL_SHEEPDOG;
> > if (VIR_STRDUP(def->src, p + strlen("sheepdog:")) < 0)
> > goto error;
> > + VIR_FREE(p);
> >
> > /* def->src must be [vdiname] or [host]:[port]:[vdiname] */
> > port = strchr(def->src, ':');
> > if (port) {
> > - *port++ = '\0';
> > - vdi = strchr(port, ':');
> > + *port = '\0';
> > + vdi = strchr(port + 1, ':');
> > if (!vdi) {
> > + *port = ':';
>
> Is this bit necessary? Or is it for making the error message look better?
Yep, we want to show the user their original full input, not the truncated
one.
>
> > virReportError(VIR_ERR_INTERNAL_ERROR,
> > - _("cannot parse sheepdog filename '%s'"), p);
> > + _("cannot parse sheepdog filename '%s'"), def->src);
> > goto error;
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list