qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 0/3] Vhost: no more leak QEMU virtual addresses


From: Maxime Coquelin
Subject: Re: [Qemu-devel] [PATCH 0/3] Vhost: no more leak QEMU virtual addresses to user backend
Date: Thu, 21 Dec 2017 15:01:25 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0



On 12/21/2017 04:53 AM, Michael S. Tsirkin wrote:
On Wed, Dec 20, 2017 at 04:07:41PM +0000, Stefan Hajnoczi wrote:
On Tue, Dec 19, 2017 at 07:11:26PM +0100, Maxime Coquelin wrote:
Before this series, QEMU process virtual addresses are sent to the
user backend as user addresses.

Passing these virtual addresses aren't useful, as the backend doesn't
direct access to QEMU address space.

It does make sense however for kernel backend, which can access QEMU
address space.

This series introduce a new enum set by the backend stating whether it
prefers using QEMU Virtual addresses or Guest physical addresses as
User address, and make vhost-user backend to use Guest physical
addresses.

Maxime Coquelin (3):
   vhost-user: rename VhostUserMemory userspace_addr field to user_addr
   vhost: introduce backend's user address type
   vhost-user: no more leak QEMU virtual addresses to user backend

  hw/virtio/vhost-backend.c         |  1 +
  hw/virtio/vhost-user.c            |  6 ++++--
  hw/virtio/vhost.c                 | 16 ++++++++++++----
  include/hw/virtio/vhost-backend.h |  6 ++++++
  4 files changed, 23 insertions(+), 6 deletions(-)

--
2.14.3


Reviewed-by: Stefan Hajnoczi <address@hidden>

This makes make check fail. Any idea why?


That's interesting, it fails because the rings aren't initialized with
vhost-user-test (even without my series, but we don't notice).

It fails in vhost_virtqueue_start(), because vq->desc is NULL.

Adding some debug prints shows that vq->desc_phys, vq->avail_phys and vq->used_phys are all 0 for both queues.

So when using QEMU VAs as user addresses, vq->desc, vq->used and
vq->avail are translated to a non-NULL address, and it doesn't fail.

Only the multiqueue test returns non-zero and different addresses
between the rings.

I'm looking into it.

Regards,
Maxime



reply via email to

[Prev in Thread] Current Thread [Next in Thread]