]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
domain: Fix crash if trying to live update disk <serial>
authorCole Robinson <crobinso@redhat.com>
Mon, 10 Aug 2015 23:01:43 +0000 (19:01 -0400)
committerCole Robinson <crobinso@redhat.com>
Tue, 22 Sep 2015 00:17:59 +0000 (20:17 -0400)
If you pass <disk><serial> XML to UpdateDevice, and the original device
didn't have a <serial> block, libvirtd crashes trying to read the original
NULL serial string.

Use _NULLABLE string comparisons to avoid the crash. A couple other
properties needed the change too.

(cherry picked from commit c7790408d7e16b1ad00a690433d9310f104994f7)

src/conf/domain_conf.c

index 2837ba970081bf8d092464e6173aebfee0b71a5b..9a53a35be94b8649591ba8fd2d61a86b33628224 100644 (file)
@@ -5815,28 +5815,28 @@ virDomainDiskDiffersSourceOnly(virDomainDiskDefPtr disk,
 
     CHECK_EQ(transient, "transient", true);
 
-    if (disk->serial && STRNEQ(disk->serial, orig_disk->serial)) {
+    if (disk->serial && STRNEQ_NULLABLE(disk->serial, orig_disk->serial)) {
         virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
                        _("cannot modify field '%s' of the disk"),
                        "serial");
         return false;
     }
 
-    if (disk->wwn && STRNEQ(disk->wwn, orig_disk->wwn)) {
+    if (disk->wwn && STRNEQ_NULLABLE(disk->wwn, orig_disk->wwn)) {
         virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
                        _("cannot modify field '%s' of the disk"),
                        "wwn");
         return false;
     }
 
-    if (disk->vendor && STRNEQ(disk->vendor, orig_disk->vendor)) {
+    if (disk->vendor && STRNEQ_NULLABLE(disk->vendor, orig_disk->vendor)) {
         virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
                        _("cannot modify field '%s' of the disk"),
                        "vendor");
         return false;
     }
 
-    if (disk->product && STRNEQ(disk->product, orig_disk->product)) {
+    if (disk->product && STRNEQ_NULLABLE(disk->product, orig_disk->product)) {
         virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
                        _("cannot modify field '%s' of the disk"),
                        "product");