From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by dpdk.org (Postfix) with ESMTP id 4BC512952 for ; Fri, 5 Oct 2018 11:54:30 +0200 (CEST) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20181005095429euoutp0276ccaea1ae91a611169bf90609ea61c8~arcGk20jx2456924569euoutp02b for ; Fri, 5 Oct 2018 09:54:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20181005095429euoutp0276ccaea1ae91a611169bf90609ea61c8~arcGk20jx2456924569euoutp02b DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1538733269; bh=wPrdCRTEXz/8B5lOoahdsK5TmVz95c8Ig++fpV7bULQ=; h=Subject:To:Cc:From:Date:In-Reply-To:References:From; b=C0CuU5ZijdXG6QA//yuqNYN/LSPMg3xDYD6CUohREufDiCK7oCNEklscaTuOmPoyD IGKQ+aFb4+UchQ7AJxO4Gl34lHz9FZ3WGokgIjM5A3EbcuMNBxiqGeEk4QZzI14dAI NQbpusbq5Jvet/mE++tFRBrrUkfe/WEFSmnrdxos= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20181005095428eucas1p2a94126086219c4c27824a83a0fcbb198~arcFuvqM42266222662eucas1p2Z; Fri, 5 Oct 2018 09:54:28 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 81.86.04294.4D437BB5; Fri, 5 Oct 2018 10:54:28 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20181005095427eucas1p118e02435cf618d4f5306c734b423d0b1~arcEyNIT03167231672eucas1p1b; Fri, 5 Oct 2018 09:54:27 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20181005095427eusmtrp29a2980c643b2acac2287a938f82bf52f~arcEg0XM52330723307eusmtrp2f; Fri, 5 Oct 2018 09:54:27 +0000 (GMT) X-AuditID: cbfec7f4-84fff700000010c6-e2-5bb734d4bd4b Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id BF.B7.04128.3D437BB5; Fri, 5 Oct 2018 10:54:27 +0100 (BST) Received: from [106.109.129.180] (unknown [106.109.129.180]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20181005095426eusmtip2dbe8f02ba56f2704f77831e13629b6a7~arcD0hpZT2807728077eusmtip2L; Fri, 5 Oct 2018 09:54:26 +0000 (GMT) To: Maxime Coquelin , dev@dpdk.org, tiwei.bie@intel.com, zhihong.wang@intel.com, jfreimann@redhat.com, nicknickolaev@gmail.com, bruce.richardson@intel.com, alejandro.lucero@netronome.com Cc: dgilbert@redhat.com, stable@dpdk.org From: Ilya Maximets Date: Fri, 5 Oct 2018 12:56:44 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <20181004081403.8039-8-maxime.coquelin@redhat.com> Content-Language: en-GB Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrCKsWRmVeSWpSXmKPExsWy7djP87pXTLZHGyz4p2Vx7tMyJosbq+wt 3n3azmTRu+0eu8WV9p/sFufWLGWxONa5h8Xi9MJrLBb/Ov6wW2xt+M9ksfniJCYHbo9fC5ay euycdZfdY/Gel0we07sfMnu833eVzaNvyyrGALYoLpuU1JzMstQifbsEroydd+6xFnyWq1h2 9AFLA+M1iS5GTg4JAROJu5/aGLsYuTiEBFYwSvye8Z0VwvnCKLHj5iYmCOczo8T+49eYYFqO Lr8IVbWcUeLyrb9sEM5HRonexRBVwgJREpNWdoNViQjcYZS4svQSG0iCWUBDYv3VJ4wgNpuA jsSp1UfAbBYBFYnn676wgNiiAhESRx4sBIvzCghKnJz5BCzOKWAvcX3yKag54hJNX1ayQtjy EtvfzmEGWSYhcI1dYuH3uexdjBxAzWUSs/arQ5ztIjHn6S1WCFtY4tXxLewQtozE/53zoV6r l7jf8pIRYk4Ho8T0Q/+gEvYSW16fA5vJLKApsX6XPkTYUeLrtffMIGEJAT6JG28FIc7hk5i0 bTpUmFeio00IolpF4vfB5cwQtpTEzXef2ScwKs1C8uQsJI/NQvLYLIS9CxhZVjGKp5YW56an FhvlpZbrFSfmFpfmpesl5+duYgSmrdP/jn/ZwbjrT9IhRgEORiUe3hfK26KFWBPLiitzDzFK cDArifCGlwCFeFMSK6tSi/Lji0pzUosPMUpzsCiJ8y6btzFaSCA9sSQ1OzW1ILUIJsvEwSnV wLiiYpfFI8WDj+Mn57xh7lkp85RvtV7nsusLgo06fErjCi6vDtzvpX7keeubj22Ljjx4bMDD vvIUS9a1iZmdQn6B5xuvzgid8mvD/s8mW47vMflRqXC5+njjwy3C35msrGxFH9jN53kqKfpR sclr4pyIuuethimKfsZPykR3rf+2Z4X0ll+n2aYrsRRnJBpqMRcVJwIAdVBf21cDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrOIsWRmVeSWpSXmKPExsVy+t/xe7qXTbZHG8x/pmZx7tMyJosbq+wt 3n3azmTRu+0eu8WV9p/sFufWLGWxONa5h8Xi9MJrLBb/Ov6wW2xt+M9ksfniJCYHbo9fC5ay euycdZfdY/Gel0we07sfMnu833eVzaNvyyrGALYoPZui/NKSVIWM/OISW6VoQwsjPUNLCz0j E0s9Q2PzWCsjUyV9O5uU1JzMstQifbsEvYydd+6xFnyWq1h29AFLA+M1iS5GTg4JAROJo8sv soLYQgJLGSUu3daDiEtJ/Ph1gRXCFpb4c62LrYuRC6jmPaPEo5mtLCAJYYEoifMXtrGCJEQE 7jBKbJl1hhEkwSygIbH+6hNGiI7jjBJTZxxgB0mwCehInFp9BKyIV8BOYsWOJrBJLAIqEs/X fQGzRQUiJFYvf8EKUSMocXLmE7A4p4C9xPXJp9ggFqhL/Jl3iRnCFpdo+rKSFcKWl9j+dg7z BEahWUjaZyFpmYWkZRaSlgWMLKsYRVJLi3PTc4uN9IoTc4tL89L1kvNzNzECI3XbsZ9bdjB2 vQs+xCjAwajEwztBcVu0EGtiWXFl7iFGCQ5mJRHe8BKgEG9KYmVValF+fFFpTmrxIUZToOcm MkuJJucDk0heSbyhqaG5haWhubG5sZmFkjjveYPKKCGB9MSS1OzU1ILUIpg+Jg5OqQZGI/WN vcnChobHlcOmHTmdsirWUiPtqnGdqV1fAmurz/qO50w7FT4/y/7ZxDFlatB/ycQZj0sUWpyi Uj9o7mc7y7rnAq/oFKmFt47HJN9ffetfNqdhyCpfLkO2ooQTzbs1Wszm9zT/0Cz1cbRffyL6 kWzg8W/Zi+bOOy0TxBbjwW/zMjlTllWJpTgj0VCLuag4EQAom/3I6gIAAA== Message-Id: <20181005095427eucas1p118e02435cf618d4f5306c734b423d0b1~arcEyNIT03167231672eucas1p1b@eucas1p1.samsung.com> X-CMS-MailID: 20181005095427eucas1p118e02435cf618d4f5306c734b423d0b1 X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-RootMTR: 20181004081459epcas2p164dd0d55580aefc16bd78fc9afd6e8b7 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20181004081459epcas2p164dd0d55580aefc16bd78fc9afd6e8b7 References: <20181004081403.8039-1-maxime.coquelin@redhat.com> <20181004081403.8039-8-maxime.coquelin@redhat.com> Subject: Re: [dpdk-dev] [PATCH v3 07/19] vhost: add number of fds to vhost-user messages and use it X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Oct 2018 09:54:31 -0000 On 04.10.2018 11:13, Maxime Coquelin wrote: > As soons as some anciliarry datai (fds) are received, it is copied > without checking its length. > > This patch adds adds the number of fds received to the message, > which is set in read_vhost_message(). > > This is preliminary work to support sending fds to Qemu. > > Signed-off-by: Dr. David Alan Gilbert > Signed-off-by: Maxime Coquelin > --- > lib/librte_vhost/socket.c | 21 ++++++++++++++++----- > lib/librte_vhost/vhost_user.c | 2 +- > lib/librte_vhost/vhost_user.h | 4 +++- > 3 files changed, 20 insertions(+), 7 deletions(-) > > diff --git a/lib/librte_vhost/socket.c b/lib/librte_vhost/socket.c > index d63031747..c04d3d305 100644 > --- a/lib/librte_vhost/socket.c > +++ b/lib/librte_vhost/socket.c > @@ -94,18 +94,23 @@ static struct vhost_user vhost_user = { > .mutex = PTHREAD_MUTEX_INITIALIZER, > }; > > -/* return bytes# of read on success or negative val on failure. */ > +/* > + * return bytes# of read on success or negative val on failure. Update fdnum > + * with number of fds read. > + */ > int > -read_fd_message(int sockfd, char *buf, int buflen, int *fds, int fd_num) > +read_fd_message(int sockfd, char *buf, int buflen, int *fds, int max_fds, > + int *fd_num) > { > struct iovec iov; > struct msghdr msgh; > - size_t fdsize = fd_num * sizeof(int); > - char control[CMSG_SPACE(fdsize)]; > + char control[CMSG_SPACE(max_fds * sizeof(int))]; > struct cmsghdr *cmsg; > int got_fds = 0; > int ret; > > + *fd_num = 0; > + > memset(&msgh, 0, sizeof(msgh)); > iov.iov_base = buf; > iov.iov_len = buflen; > @@ -131,13 +136,19 @@ read_fd_message(int sockfd, char *buf, int buflen, int *fds, int fd_num) > if ((cmsg->cmsg_level == SOL_SOCKET) && > (cmsg->cmsg_type == SCM_RIGHTS)) { > got_fds = (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int); > + if (got_fds > max_fds) { > + RTE_LOG(ERR, VHOST_CONFIG, > + "Received msg contains more fds than supported\n"); > + return -1; Looks like we'll leak all that file descriptors here. I think, we need to get and close the valid ones anyway. > + } > + *fd_num = got_fds; > memcpy(fds, CMSG_DATA(cmsg), got_fds * sizeof(int)); > break; > } > } > > /* Clear out unused file descriptors */ > - while (got_fds < fd_num) > + while (got_fds < max_fds) > fds[got_fds++] = -1; > > return ret; > diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c > index b6eae8dc5..ad69a267e 100644 > --- a/lib/librte_vhost/vhost_user.c > +++ b/lib/librte_vhost/vhost_user.c > @@ -1518,7 +1518,7 @@ read_vhost_message(int sockfd, struct VhostUserMsg *msg) > int ret; > > ret = read_fd_message(sockfd, (char *)msg, VHOST_USER_HDR_SIZE, > - msg->fds, VHOST_MEMORY_MAX_NREGIONS); > + msg->fds, VHOST_MEMORY_MAX_NREGIONS, &msg->fd_num); > if (ret <= 0) > return ret; > > diff --git a/lib/librte_vhost/vhost_user.h b/lib/librte_vhost/vhost_user.h > index 42166adf2..dd0262f8f 100644 > --- a/lib/librte_vhost/vhost_user.h > +++ b/lib/librte_vhost/vhost_user.h > @@ -132,6 +132,7 @@ typedef struct VhostUserMsg { > VhostUserVringArea area; > } payload; > int fds[VHOST_MEMORY_MAX_NREGIONS]; > + int fd_num; > } __attribute((packed)) VhostUserMsg; > > #define VHOST_USER_HDR_SIZE offsetof(VhostUserMsg, payload.u64) > @@ -146,7 +147,8 @@ int vhost_user_iotlb_miss(struct virtio_net *dev, uint64_t iova, uint8_t perm); > int vhost_user_host_notifier_ctrl(int vid, bool enable); > > /* socket.c */ > -int read_fd_message(int sockfd, char *buf, int buflen, int *fds, int fd_num); > +int read_fd_message(int sockfd, char *buf, int buflen, int *fds, int max_fds, > + int *fd_num); > int send_fd_message(int sockfd, char *buf, int buflen, int *fds, int fd_num); > > #endif >