]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Fix validation of PCI option rom settings on hotplug
authorPeter Krempa <pkrempa@redhat.com>
Thu, 25 Nov 2021 15:17:16 +0000 (16:17 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 26 Nov 2021 09:02:32 +0000 (10:02 +0100)
Commit 24be92b8e moved the option rom settings validation code to the
validation callbacks, but that doesn't work properly with device hotplug
as we assign addresses only after parsing the whole XML. The check is
too strict for that and caused failures when hotplugging devices such
as:

 <interface type='network'>
   <source network='default'/>
   <model type='virtio'/>
   <rom enabled='no'/>
 </interface>

This patch relaxes the check in the validation callback to accept also
_NONE and _UNASSIGNED address types and returns the check to
'qemuBuildRomProps' so that we preserve the full validation as we've
used to.

Fixes: 24be92b8e38762e9ba13e
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2021437
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_command.c
src/qemu/qemu_validate.c

index 7a185061d8711726aad33483b21d18da4795c55e..c47998aabdf1b4c2625643bd7a6442228fd91ceb 100644 (file)
@@ -1147,6 +1147,12 @@ qemuBuildRomProps(virJSONValue *props,
         !info->romfile)
         return 0;
 
+    if (info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("ROM tuning is only supported for PCI devices"));
+        return -1;
+    }
+
     if (info->romenabled == VIR_TRISTATE_BOOL_NO) {
         romfile = "";
     } else {
index 397eea5edeaa1c1548476e3948c50d49ee1ef9c4..1de6e05101283ed70cf97ffb9d107e30aeb4937d 100644 (file)
@@ -1485,7 +1485,9 @@ qemuValidateDomainDeviceInfo(const virDomainDeviceDef *dev,
     }
 
     if (info->romenabled || info->rombar || info->romfile) {
-        if (info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
+        if (info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI &&
+            info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
+            info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_UNASSIGNED) {
             virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                            _("ROM tuning is only supported for PCI devices"));
             return -1;