vhost: fetch ring address after NUMA reallocation
authorMaxime Coquelin <maxime.coquelin@redhat.com>
Fri, 13 Oct 2017 09:30:21 +0000 (11:30 +0200)
committerThomas Monjalon <thomas@monjalon.net>
Fri, 13 Oct 2017 20:08:21 +0000 (22:08 +0200)
In case of NUMA reallocation, the virtqueue struct is reallocated
on another socket, meaning that its address changes.

In translate_ring_addresses(), addr pointer was not fetched again
after the reallocation, so it pointed to freed memory.

This patch just fetch again addr pointer after the reallocation.

Reported-by: Lei Yao <lei.a.yao@intel.com>
Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Tested-by: Lei Yao <lei.a.yao@intel.com>
Reviewed-by: Jens Freimann <jfreimann@redhat.com>
lib/librte_vhost/vhost_user.c

index 1dfb234..76c4eec 100644 (file)
@@ -420,6 +420,7 @@ translate_ring_addresses(struct virtio_net *dev, int vq_index)
 
        dev = numa_realloc(dev, vq_index);
        vq = dev->virtqueue[vq_index];
+       addr = &vq->ring_addrs;
 
        vq->avail = (struct vring_avail *)(uintptr_t)ring_addr_to_vva(dev,
                        vq, addr->avail_user_addr, sizeof(struct vring_avail));