[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[qemu-xen master] virtio: verify that legacy support is not accidentally on



commit 9b3a35ec8236933ab958a4c3ad883163f1ca66e7
Author:     Cornelia Huck <cohuck@xxxxxxxxxx>
AuthorDate: Tue Jul 7 12:54:46 2020 +0200
Commit:     Michael S. Tsirkin <mst@xxxxxxxxxx>
CommitDate: Wed Jul 22 07:57:07 2020 -0400

    virtio: verify that legacy support is not accidentally on
    
    If a virtio device does not have legacy support, make sure that
    it is actually off, and bail out if not.
    
    For virtio-pci, this means that any device without legacy support
    that has been specified to modern-only (or that has been forced
    to it) will work.
    
    For virtio-ccw, this duplicates the check that is currently done
    prior to realization for any device that explicitly specified no
    support for legacy.
    
    This catches devices that have not been fenced properly.
    
    Signed-off-by: Cornelia Huck <cohuck@xxxxxxxxxx>
    Message-Id: <20200707105446.677966-3-cohuck@xxxxxxxxxx>
    Cc: qemu-stable@xxxxxxxxxx
    Acked-by: Halil Pasic <pasic@xxxxxxxxxxxxx>
    Reviewed-by: Michael S. Tsirkin <mst@xxxxxxxxxx>
    Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx>
---
 hw/s390x/virtio-ccw.c  | 6 ++++++
 hw/virtio/virtio-pci.c | 4 ++++
 2 files changed, 10 insertions(+)

diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
index 3c988a000b..0e60270297 100644
--- a/hw/s390x/virtio-ccw.c
+++ b/hw/s390x/virtio-ccw.c
@@ -1121,6 +1121,12 @@ static void virtio_ccw_device_plugged(DeviceState *d, 
Error **errp)
         dev->max_rev = 0;
     }
 
+    if (!virtio_ccw_rev_max(dev) && !virtio_legacy_allowed(vdev)) {
+        error_setg(errp, "Invalid value of property max_rev "
+                   "(is %d expected >= 1)", virtio_ccw_rev_max(dev));
+        return;
+    }
+
     if (virtio_get_num_queues(vdev) > VIRTIO_QUEUE_MAX) {
         error_setg(errp, "The number of virtqueues %d "
                    "exceeds virtio limit %d", n,
diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index 8554cf2a03..db8b711b35 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -1581,6 +1581,10 @@ static void virtio_pci_device_plugged(DeviceState *d, 
Error **errp)
     }
 
     if (legacy) {
+        if (!virtio_legacy_allowed(vdev)) {
+            error_setg(errp, "device is modern-only, use disable-legacy=on");
+            return;
+        }
         if (virtio_host_has_feature(vdev, VIRTIO_F_IOMMU_PLATFORM)) {
             error_setg(errp, "VIRTIO_F_IOMMU_PLATFORM was supported by"
                        " neither legacy nor transitional device");
--
generated by git-patchbot for /home/xen/git/qemu-xen.git#master



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.