[libvirt] [PATCH] snapshot: don't pass NULL to QMP command creation

Eric Blake eblake at redhat.com
Tue Mar 27 14:37:34 UTC 2012


Commit d42a2ff caused a regression in creating a disk-only snapshot
of a qcow2 disk; by passing the wrong variable to the monitor call,
libvirt ended up creating JSON that looked like "format":null instead
of the intended "format":"qcow2".

To make it easier to diagnose this in the future, make JSON creation
error out if "s:arg" is paired with NULL (it is still possible to
use "n:arg" in the rare cases where qemu will accept a null).

* src/qemu/qemu_driver.c
(qemuDomainSnapshotCreateSingleDiskActive): Pass correct value.
* src/qemu/qemu_monitor_json.c (qemuMonitorJSONMakeCommandRaw):
Improve error message.
---
 src/qemu/qemu_driver.c       |    2 +-
 src/qemu/qemu_monitor_json.c |    6 ++++++
 2 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index ea772cf..1f4dfe6 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -9894,7 +9894,7 @@ qemuDomainSnapshotCreateSingleDiskActive(struct qemud_driver *driver,

     /* create the actual snapshot */
     ret = qemuMonitorDiskSnapshot(priv->mon, actions, device, source,
-                                  driverType, reuse);
+                                  snap->driverType, reuse);
     virDomainAuditDisk(vm, disk->src, source, "snapshot", ret >= 0);
     if (ret < 0)
         goto cleanup;
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index eeeb6a6..8c028b9 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -417,6 +417,12 @@ qemuMonitorJSONMakeCommandRaw(bool wrap, const char *cmdname, ...)
         switch (type) {
         case 's': {
             char *val = va_arg(args, char *);
+            if (!val) {
+                qemuReportError(VIR_ERR_INTERNAL_ERROR,
+                                _("argument key '%s' must not have null value"),
+                                key);
+                goto error;
+            }
             ret = virJSONValueObjectAppendString(jargs, key, val);
         }   break;
         case 'i': {
-- 
1.7.7.6




More information about the libvir-list mailing list