VHOST_SET_LOG_BASE got an incorrect address, causing
migration errors and potentially even memory corruption.
Cc: Peter Maydell <peter.maydell at linaro.org>
Reported-by: Wen Congyang <wency at cn.fujitsu.com>
Signed-off-by: Michael S. Tsirkin <mst at redhat.com>
---
Could you please confirm this fixes the problem for you?
hw/virtio/vhost.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
index 8dd2f59..02c5604 100644
--- a/hw/virtio/vhost.c
+++ b/hw/virtio/vhost.c
@@ -1016,10 +1016,13 @@ int vhost_dev_start(struct vhost_dev *hdev, VirtIODevice
*vdev)
}
if (hdev->log_enabled) {
+ uint64_t log_base;
+
hdev->log_size = vhost_get_log_size(hdev);
hdev->log = hdev->log_size ?
g_malloc0(hdev->log_size * sizeof *hdev->log) : NULL;
- r = hdev->vhost_ops->vhost_call(hdev, VHOST_SET_LOG_BASE,
hdev->log);
+ log_base = (uint64_t)(unsigned long)log_base;
+ r = hdev->vhost_ops->vhost_call(hdev, VHOST_SET_LOG_BASE,
&log_base);
if (r < 0) {
r = -errno;
goto fail_log;
--
MST