On 08/11/2015 05:25 PM, John Ferlan wrote: > > > On 08/10/2015 07:33 PM, Cole Robinson wrote: >> 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. >> --- >> src/conf/domain_conf.c | 8 ++++---- >> 1 file changed, 4 insertions(+), 4 deletions(-) >> > > Using STRNEQ_NULLABLE means you probably don't have to check the disk->* > value either, right? > > ACK - with that adjustment... > It would change the semantic a bit; if the orig disk has a <serial>, but not the XML passed to UpdateDevice, libvirt would now error where previously it wouldn't. It might make sense but I didn't want to change behavior - Cole > John >> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c >> index fd0450f..f1e02e3 100644 >> --- a/src/conf/domain_conf.c >> +++ b/src/conf/domain_conf.c >> @@ -5871,28 +5871,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"); >> -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list