Hi Maxime, > -----Original Message----- > From: Maxime Coquelin <maxime.coque...@redhat.com> > Sent: Thursday, November 5, 2020 7:46 PM > To: dev@dpdk.org; Ding, Xuan <xuan.d...@intel.com>; > step...@networkplumber.org; Yigit, Ferruh <ferruh.yi...@intel.com>; > tho...@monjalon.net; Xia, Chenbo <chenbo....@intel.com> > Cc: sta...@dpdk.org; Maxime Coquelin <maxime.coque...@redhat.com> > Subject: [PATCH 2/3] vhost: fix fd leak in dirty logging setup > > This patch fixes a file descriptor leak which happens > in the error path of vhost_user_set_log_base(). > > Fixes: 4796ad63ba1f ("examples/vhost: import userspace vhost application") > Cc: sta...@dpdk.org > > Reported-by: Xuan Ding <xuan.d...@intel.com> > Signed-off-by: Maxime Coquelin <maxime.coque...@redhat.com> > --- > lib/librte_vhost/vhost_user.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c > index 473fd778ca..7dfda15991 100644 > --- a/lib/librte_vhost/vhost_user.c > +++ b/lib/librte_vhost/vhost_user.c > @@ -2076,14 +2076,14 @@ vhost_user_set_log_base(struct virtio_net **pdev, > struct VhostUserMsg *msg, > > if (fd < 0) { > VHOST_LOG_CONFIG(ERR, "invalid log fd: %d\n", fd); > - return RTE_VHOST_MSG_RESULT_ERR; > + goto close_msg_fds;
IMHO, there's nothing to close in this case. Before this check, validate_msg_fds makes sure that this msg has only one fd and now this fd is invalid. So when this error occurs, going to close_msg_fds always does nothing. So I think we don't need this change here? Thanks! Chenbo > } > > if (msg->size != sizeof(VhostUserLog)) { > VHOST_LOG_CONFIG(ERR, > "invalid log base msg size: %"PRId32" != %d\n", > msg->size, (int)sizeof(VhostUserLog)); > - return RTE_VHOST_MSG_RESULT_ERR; > + goto close_msg_fds; > } > > size = msg->payload.log.mmap_size; > @@ -2094,7 +2094,7 @@ vhost_user_set_log_base(struct virtio_net **pdev, > struct VhostUserMsg *msg, > VHOST_LOG_CONFIG(ERR, > "log offset %#"PRIx64" and log size %#"PRIx64" > overflow\n", > off, size); > - return RTE_VHOST_MSG_RESULT_ERR; > + goto close_msg_fds; > } > > VHOST_LOG_CONFIG(INFO, > @@ -2131,6 +2131,10 @@ vhost_user_set_log_base(struct virtio_net **pdev, > struct VhostUserMsg *msg, > msg->fd_num = 0; > > return RTE_VHOST_MSG_RESULT_REPLY; > + > +close_msg_fds: > + close_msg_fds(msg); > + return RTE_VHOST_MSG_RESULT_ERR; > } > > static int vhost_user_set_log_fd(struct virtio_net **pdev __rte_unused, > -- > 2.26.2