From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yuanhan Liu Subject: Re: [PATCH] vhost: fix fd leaks for vhost-user server mode Date: Sat, 1 Apr 2017 13:15:20 +0800 Message-ID: <20170401051520.GP18844@yliu-dev.sh.intel.com> References: <1490604735-1704-1-git-send-email-yuanhan.liu@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Maxime Coquelin , Ilya Maximets , stable@dpdk.org To: dev@dpdk.org Return-path: Content-Disposition: inline In-Reply-To: <1490604735-1704-1-git-send-email-yuanhan.liu@linux.intel.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Mon, Mar 27, 2017 at 04:52:15PM +0800, Yuanhan Liu wrote: > A vhost-user server socket could have many connections, thus many connfd. > However, we currently just use one single int var to store it. Meaning, > it will get overwritten every time a new connection is created. > > While this will not create fatal issue as it sounds (since the correct > connfd is closured to the event loop thread by fdset_add), it may cause > fd leaks if a user invokes rte_vhost_driver_unregister before shutting > down all connections: it just closes the recent connfd. > > A simple example that should be able to reproduce this leaks issues is, > del the ovs vhost-user port while the connected VMs are still alive. (Note > that it's suggested to use one socket for one VM, which makes the issue > not that fatal as it sounds again). > > Since we already use a struct "vhost_user_connection" to track all info > about one connection, it's obvious that we should put the connfd there. > Then we could build a connection list inside the vhost_user_socket struct, > to represent all connections belong that socket file. > > Fixes: 164fd396788d ("vhost: fix unregistering in client mode") Applied to dpdk-next-virtio. --yliu > > Cc: Ilya Maximets > Cc: stable@dpdk.org > Signed-off-by: Yuanhan Liu