diff mbox series

[v3,04/21] hw/virtio: log potentially buggy guest drivers

Message ID 20220726192150.2435175-5-alex.bennee@linaro.org
State New
Headers show
Series virtio-gpio and various virtio cleanups | expand

Commit Message

Alex Bennée July 26, 2022, 7:21 p.m. UTC
If the guest driver attempts to use the UNUSED(30) bit it is
potentially buggy as 6.3 Legacy Interface: Reserved Feature Bits
states it "SHOULD NOT be negotiated". For now just log this guest
error.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 hw/virtio/virtio.c | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Jason Wang July 28, 2022, 6:09 a.m. UTC | #1
在 2022/7/27 03:21, Alex Bennée 写道:
> If the guest driver attempts to use the UNUSED(30) bit it is
> potentially buggy as 6.3 Legacy Interface: Reserved Feature Bits
> states it "SHOULD NOT be negotiated". For now just log this guest
> error.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>


Acked-by: Jason Wang <jasowang@redhat.com>


> ---
>   hw/virtio/virtio.c | 7 +++++++
>   1 file changed, 7 insertions(+)
>
> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
> index 5d607aeaa0..97a6307c0f 100644
> --- a/hw/virtio/virtio.c
> +++ b/hw/virtio/virtio.c
> @@ -2980,6 +2980,13 @@ int virtio_set_features(VirtIODevice *vdev, uint64_t val)
>       if (vdev->status & VIRTIO_CONFIG_S_FEATURES_OK) {
>           return -EINVAL;
>       }
> +
> +    if (val & (1ull << VIRTIO_F_BAD_FEATURE)) {
> +        qemu_log_mask(LOG_GUEST_ERROR,
> +                      "%s: guest driver for %s has enabled UNUSED(30) feature bit!\n",
> +                      __func__, vdev->name);
> +    }
> +
>       ret = virtio_set_features_nocheck(vdev, val);
>       if (virtio_vdev_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
>           /* VIRTIO_RING_F_EVENT_IDX changes the size of the caches.  */
diff mbox series

Patch

diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index 5d607aeaa0..97a6307c0f 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -2980,6 +2980,13 @@  int virtio_set_features(VirtIODevice *vdev, uint64_t val)
     if (vdev->status & VIRTIO_CONFIG_S_FEATURES_OK) {
         return -EINVAL;
     }
+
+    if (val & (1ull << VIRTIO_F_BAD_FEATURE)) {
+        qemu_log_mask(LOG_GUEST_ERROR,
+                      "%s: guest driver for %s has enabled UNUSED(30) feature bit!\n",
+                      __func__, vdev->name);
+    }
+
     ret = virtio_set_features_nocheck(vdev, val);
     if (virtio_vdev_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
         /* VIRTIO_RING_F_EVENT_IDX changes the size of the caches.  */