From: "Michael S. Tsirkin" <[email protected]>
When vhost_commit() rebuilds the memory region table after a flatview
change, it revalidates cached host virtual addresses for active vring
parts. If a mapping is stale, QEMU abort().
This is not a security problem - only the priviledged guest
can control make it invalid - but not nice e.g. for driver debugging.
Let's call virtio_error() instead, marking the device as broken.
Fixes: 0ca1fd2d68 ("vhost: Simplify ring verification checks")
Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3783
Cc: Stefano Garzarella <[email protected]>
Cc: Dr. David Alan Gilbert <[email protected]>
Reported-by: Feifan Qian <[email protected]>
Signed-off-by: Michael S. Tsirkin <[email protected]>
Message-ID:
<71961a7dc157f552303aeea8c99a75c5e1ce904e.1784898432.git....@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <[email protected]>
(cherry picked from commit 27806d2ddba2da97fb4137cba7d4172356c42914)
Signed-off-by: Michael Tokarev <[email protected]>
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
index 971460eb2a6..2e59a8aa0bd 100644
--- a/hw/virtio/vhost.c
+++ b/hw/virtio/vhost.c
@@ -681,8 +681,9 @@ static void vhost_commit(MemoryListener *listener)
(void *)(uintptr_t)dev->mem->regions[i].userspace_addr,
dev->mem->regions[i].guest_phys_addr,
dev->mem->regions[i].memory_size)) {
- error_report("Verify ring failure on region %d", i);
- abort();
+ virtio_error(dev->vdev,
+ "Verify ring failure on region %d", i);
+ goto out;
}
}
--
2.47.3