A vDPA driver can configure its device FD to be notified directly by the guest memory mapping using `rte_vhost_host_notifier_ctrl` API.
The driver request is managed by the dpdk vhost management and is forwarded to the QEMU, the vhost massage includes reply request in order to be sure that the memory mapping was done correctly by the QEMU. When QEMU finishes the configuration, it marks that its replay is valid in the slave FD using VHOST_USER_REPLY_MASK flag. The flag is set only in success and when the slave FD includes the reply data. The vhost library didn't validate the above flag before accessing to the slave FD, it leaded to the thread to be blocked on recvmsg call forever in case the QEMU has some problems in the notifier configuration. Handle VHOST_USER_REPLY_MASK flag to validate that slave FD includes a reply data. Fixes: d90cf7d111ac ("vhost: support host notifier") Cc: sta...@dpdk.org Signed-off-by: Matan Azrad <ma...@mellanox.com> --- lib/librte_vhost/vhost_user.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c index 84bebad..aa19d15 100644 --- a/lib/librte_vhost/vhost_user.c +++ b/lib/librte_vhost/vhost_user.c @@ -2833,8 +2833,14 @@ static int process_slave_message_reply(struct virtio_net *dev, struct VhostUserMsg msg_reply; int ret; - if ((msg->flags & VHOST_USER_NEED_REPLY) == 0) - return 0; + if (!(msg->flags & VHOST_USER_REPLY_MASK)) { + if (msg->flags & VHOST_USER_NEED_REPLY) { + ret = -1; + goto out; + } else { + return 0; + } + } ret = read_vhost_message(dev->slave_req_fd, &msg_reply); if (ret <= 0) { -- 1.8.3.1