vhost: fix crash on NUMA
authorYuanhan Liu <yuanhan.liu@linux.intel.com>
Fri, 2 Jun 2017 00:14:46 +0000 (08:14 +0800)
committerYuanhan Liu <yliu@fridaylinux.org>
Fri, 16 Jun 2017 12:04:25 +0000 (14:04 +0200)
The queue allocation was changed, from allocating one queue-pair at a
time to one queue at a time. Most of the changes have been done, but
just with one being missed: the size of copying the old queue is still
based on queue-pair at numa_realloc(), which leads to overwritten issue.
As a result, crash may happen.

Fix it by specifying the right copy size. Also, the net queue macros
are not used any more. Remove them.

Fixes: ab4d7b9f1afc ("vhost: turn queue pair to vring")
Cc: stable@dpdk.org
Reported-by: Ciara Loftus <ciara.loftus@intel.com>
Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Reviewed-by: Jens Freimann <jfreiman@redhat.com>
Tested-by: Ciara Loftus <ciara.loftus@intel.com>
lib/librte_vhost/vhost_user.c

index 49832d6..e90b44c 100644 (file)
@@ -242,8 +242,6 @@ numa_realloc(struct virtio_net *dev, int index)
        struct vhost_virtqueue *old_vq, *vq;
        int ret;
 
-       enum {VIRTIO_RXQ, VIRTIO_TXQ, VIRTIO_QNUM};
-
        old_dev = dev;
        vq = old_vq = dev->virtqueue[index];
 
@@ -265,7 +263,7 @@ numa_realloc(struct virtio_net *dev, int index)
                if (!vq)
                        return dev;
 
-               memcpy(vq, old_vq, sizeof(*vq) * VIRTIO_QNUM);
+               memcpy(vq, old_vq, sizeof(*vq));
                rte_free(old_vq);
        }