numa_realloc() reallocates the virtio_net device structure and updates the vhost_devices[] table with the new pointer if the rings are allocated different NUMA node.
Problem is that vhost_user_msg_handler() still dereferences old pointer afterward. This patch prevents this by fetching again the dev pointer in vhost_devices[] after messages have been handled. Cc: sta...@dpdk.org Fixes: af295ad4698c ("vhost: realloc device and queues to same numa node as vring desc") Signed-off-by: Maxime Coquelin <maxime.coque...@redhat.com> --- lib/librte_vhost/vhost_user.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c index 8aca7ef7e..f495dd36e 100644 --- a/lib/librte_vhost/vhost_user.c +++ b/lib/librte_vhost/vhost_user.c @@ -1198,6 +1198,12 @@ vhost_user_msg_handler(int vid, int fd) } + /* + * The virtio_net struct might have been reallocated on a different + * NUMA node, so dev pointer might no more be valid. + */ + dev = get_device(vid); + if (msg.flags & VHOST_USER_NEED_REPLY) { msg.payload.u64 = !!ret; msg.size = sizeof(msg.payload.u64); -- 2.13.5