From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54128) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YiK4a-0003zj-HM for qemu-devel@nongnu.org; Wed, 15 Apr 2015 05:57:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YiK4W-0003f8-Ec for qemu-devel@nongnu.org; Wed, 15 Apr 2015 05:57:32 -0400 Received: from szxga03-in.huawei.com ([119.145.14.66]:6638) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YiK4V-0003cc-OS for qemu-devel@nongnu.org; Wed, 15 Apr 2015 05:57:28 -0400 Message-ID: <552E35E9.7070605@huawei.com> Date: Wed, 15 Apr 2015 17:56:57 +0800 From: zhanghailiang MIME-Version: 1.0 References: <1429090543-4736-1-git-send-email-mst@redhat.com> In-Reply-To: <1429090543-4736-1-git-send-email-mst@redhat.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] vhost: fix log base address List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" , qemu-devel@nongnu.org Cc: Peter Maydell , peter.huangpeng@huawei.com 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 > Reported-by: Wen Congyang > Signed-off-by: Michael S. Tsirkin > --- > > 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 ? > + r = hdev->vhost_ops->vhost_call(hdev, VHOST_SET_LOG_BASE, &log_base); > if (r < 0) { > r = -errno; > goto fail_log; >