Hi Maxime, > -----Original Message----- > From: Maxime Coquelin <maxime.coque...@redhat.com> > Sent: Monday, November 9, 2020 7:26 PM > To: dev@dpdk.org; Ding, Xuan <xuan.d...@intel.com>; > step...@networkplumber.org; tho...@monjalon.net; sta...@dpdk.org; Xia, > Chenbo <chenbo....@intel.com> > Cc: Maxime Coquelin <maxime.coque...@redhat.com> > Subject: [PATCH v2 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 | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c > index 473fd778ca..e4ad5f6baf 100644 > --- a/lib/librte_vhost/vhost_user.c > +++ b/lib/librte_vhost/vhost_user.c > @@ -2076,7 +2076,7 @@ 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;
I remember we have agreed on simply return here? As I look back to v1, I think you may modify the wrong place. Because I see another 'goto close_msg_fds' is deleted compared with v1 😊. 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; Thanks! Chenbo > } > > if (msg->size != sizeof(VhostUserLog)) { > @@ -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