virtio: reset device on bad guest index in virtio_load()
commit4aedda25e883c7c2e7cae911e39b84ad96ef4766
authorJohn Levon <john.levon@nutanix.com>
Fri, 20 Nov 2020 18:51:07 +0000 (20 18:51 +0000)
committerMichael S. Tsirkin <mst@redhat.com>
Tue, 8 Dec 2020 18:48:57 +0000 (8 13:48 -0500)
tree0b3bb57ec003d8db04487ee269287c6a845ebba5
parent1804857f19f612f6907832e35599cdb51d4ec764
virtio: reset device on bad guest index in virtio_load()

If we find a queue with an inconsistent guest index value, explicitly mark the
device as needing a reset - and broken - via virtio_error().

There's at least one driver implementation - the virtio-win NetKVM driver - that
is able to handle a VIRTIO_CONFIG_S_NEEDS_RESET notification and successfully
restore the device to a working state. Other implementations do not correctly
handle this, but as the VQ is not in a functional state anyway, this is still
worth doing.

Signed-off-by: John Levon <john.levon@nutanix.com>
Message-Id: <20201120185103.GA442386@sent>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
hw/virtio/virtio.c