On 04/15/2015 05:56 PM, zhanghailiang wrote:
> On 2015/4/15 17:37, Michael S. Tsirkin wrote:
>> VHOST_SET_LOG_BASE got an incorrect address, causing
>> migration errors and potentially even memory corruption.
>>
>> Cc: Peter Maydell <[email protected]>
>> Reported-by: Wen Congyang <[email protected]>
>> Signed-off-by: Michael S. Tsirkin <[email protected]>
>> ---
>>
>> 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;
> ^^^^^^^^
>
> s/log_base/hdev->log ?
I test the patch with this modification. It works for me.
Thanks
Wen Congyang
>
>> + r = hdev->vhost_ops->vhost_call(hdev, VHOST_SET_LOG_BASE,
>> &log_base);
>> if (r < 0) {
>> r = -errno;
>> goto fail_log;
>>
>
>
> .
>