From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41010) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yj7hZ-0004g7-4M for qemu-devel@nongnu.org; Fri, 17 Apr 2015 10:57:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Yj7hV-0007st-41 for qemu-devel@nongnu.org; Fri, 17 Apr 2015 10:57:05 -0400 Received: from mx1.redhat.com ([209.132.183.28]:53725) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yj7hU-0007sg-SK for qemu-devel@nongnu.org; Fri, 17 Apr 2015 10:57:01 -0400 Date: Fri, 17 Apr 2015 16:56:36 +0200 From: "Michael S. Tsirkin" Message-ID: <20150417165427-mutt-send-email-mst@redhat.com> References: <1429090543-4736-1-git-send-email-mst@redhat.com> <552E35E9.7070605@huawei.com> <5530291E.8040606@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Subject: Re: [Qemu-devel] [PATCH] vhost: fix log base address List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: Paolo Bonzini , "Huangpeng (Peter)" , zhanghailiang , QEMU Developers On Fri, Apr 17, 2015 at 03:40:50PM +0100, Peter Maydell wrote: > On 16 April 2015 at 22:26, Paolo Bonzini wrote: > > > > > > On 15/04/2015 11:56, 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 > >>> 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 ? > > > > Also s/unsigned long/uintptr_t/ please. The subsequent cast to uint64_t > > is not necessary. > > I think this is our remaining for-2.3 bug; would somebody like > to produce and test a patch with all the fixes mentioned in > this thread? > > thanks > -- PMM I just posted it but it's not tested yet.