aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCornelia Huck <cohuck@redhat.com>2020-07-07 12:54:46 +0200
committerMichael S. Tsirkin <mst@redhat.com>2020-07-22 07:57:07 -0400
commit9b3a35ec8236933ab958a4c3ad883163f1ca66e7 (patch)
treed9e576c28fb5e39837c5f7afddd720107a35475b
parent7c78bdd7a3d0086179331f10d1f6f8cdac34731a (diff)
downloadqemu-9b3a35ec8236933ab958a4c3ad883163f1ca66e7.zip
qemu-9b3a35ec8236933ab958a4c3ad883163f1ca66e7.tar.gz
qemu-9b3a35ec8236933ab958a4c3ad883163f1ca66e7.tar.bz2
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@redhat.com> Message-Id: <20200707105446.677966-3-cohuck@redhat.com> Cc: qemu-stable@nongnu.org Acked-by: Halil Pasic <pasic@linux.ibm.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
-rw-r--r--hw/s390x/virtio-ccw.c6
-rw-r--r--hw/virtio/virtio-pci.c4
2 files changed, 10 insertions, 0 deletions
diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
index 3c988a0..0e60270 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 8554cf2..db8b711 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");