From: Peter Krempa Date: Thu, 22 Nov 2012 10:00:14 +0000 (+0100) Subject: virsh: Report error when taking a snapshot with empty --memspec argument X-Git-Tag: CVE-2012-3411~81 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fe910efd8a67c25c9d0538bbb466239af113dc71;p=thirdparty%2Flibvirt.git virsh: Report error when taking a snapshot with empty --memspec argument When the value of memspec was empty taking of a snapshot failed without reporting an error. --- diff --git a/tools/virsh-snapshot.c b/tools/virsh-snapshot.c index 398730c954..8ec6456ed2 100644 --- a/tools/virsh-snapshot.c +++ b/tools/virsh-snapshot.c @@ -358,18 +358,19 @@ cmdSnapshotCreateAs(vshControl *ctl, const vshCmd *cmd) if (desc) virBufferEscapeString(&buf, " %s\n", desc); - if (vshCommandOptString(cmd, "memspec", &memspec) < 0 || - vshParseSnapshotMemspec(ctl, &buf, memspec) < 0) { - virBufferFreeAndReset(&buf); + if (vshCommandOptString(cmd, "memspec", &memspec) < 0) { + vshError(ctl, _("memspec argument must not be empty")); goto cleanup; } + + if (memspec && vshParseSnapshotMemspec(ctl, &buf, memspec) < 0) + goto cleanup; + if (vshCommandOptBool(cmd, "diskspec")) { virBufferAddLit(&buf, " \n"); while ((opt = vshCommandOptArgv(cmd, opt))) { - if (vshParseSnapshotDiskspec(ctl, &buf, opt->data) < 0) { - virBufferFreeAndReset(&buf); + if (vshParseSnapshotDiskspec(ctl, &buf, opt->data) < 0) goto cleanup; - } } virBufferAddLit(&buf, " \n"); } @@ -390,6 +391,7 @@ cmdSnapshotCreateAs(vshControl *ctl, const vshCmd *cmd) ret = vshSnapshotCreate(ctl, dom, buffer, flags, NULL); cleanup: + virBufferFreeAndReset(&buf); VIR_FREE(buffer); if (dom) virDomainFree(dom);