]> xenbits.xensource.com Git - libvirt.git/commitdiff
src: Access hostdev->source.subsys iff VIR_DOMAIN_HOSTDEV_MODE_SUBSYS
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 2 May 2023 08:54:26 +0000 (10:54 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Fri, 15 Sep 2023 08:34:39 +0000 (10:34 +0200)
There are few places where a virDomainHostdevDef->source.subsys
is accessed without ->mode being checked. Mind you,
virDomainHostdevDef can be also in
VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES mode.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/conf/domain_conf.c
src/conf/domain_validate.c
src/security/virt-aa-helper.c

index 1f14ef6f23be55e5d8c569049f58645c884cc27e..9d819c3dab482cc5139b74248cc6e8fa157c2978 100644 (file)
@@ -5099,7 +5099,8 @@ virDomainDriveAddressIsUsedByHostdev(const virDomainDef *def,
     for (i = 0; i < def->nhostdevs; i++) {
         hostdev = def->hostdevs[i];
 
-        if (hostdev->source.subsys.type != type ||
+        if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS ||
+            hostdev->source.subsys.type != type ||
             hostdev->info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE)
             continue;
 
index b050f21edbeddb00ac0ece05771e84708d448d9a..53d920b2b38be4f23e94074603a193bb64a26009 100644 (file)
@@ -1283,7 +1283,8 @@ virDomainDefHostdevValidate(const virDomainDef *def)
             }
         }
 
-        if (dev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV &&
+        if (dev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
+            dev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV &&
             dev->source.subsys.u.mdev.ramfb == VIR_TRISTATE_SWITCH_ON) {
             if (ramfbEnabled) {
                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
index c50629d09634e5ae1acc284c327584a09dad33f9..46384511835840f45985be2a887db18974b8b436 100644 (file)
@@ -1049,6 +1049,10 @@ get_files(vahControl * ctl)
         if (ctl->def->hostdevs[i]) {
             virDomainHostdevDef *dev = ctl->def->hostdevs[i];
             virDomainHostdevSubsysUSB *usbsrc = &dev->source.subsys.u.usb;
+
+            if (dev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS)
+                continue;
+
             switch (dev->source.subsys.type) {
             case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: {
                 virUSBDevice *usb =