Hi, > -----Original Message----- > From: Gaoxiang Liu <gaoxiangl...@163.com> > Sent: Thursday, September 2, 2021 11:46 PM > To: maxime.coque...@redhat.com; Xia, Chenbo <chenbo....@intel.com> > Cc: dev@dpdk.org; liugaoxi...@huawei.com; Gaoxiang Liu <gaoxiangl...@163.com> > Subject: [PATCH v7] vhost: fix crash on port deletion > > The rte_vhost_driver_unregister() and vhost_user_read_cb() > can be called at the same time by 2 threads. > when memory of vsocket is freed in rte_vhost_driver_unregister(), > the invalid memory of vsocket is accessed in vhost_user_read_cb(). > It's a bug of both mode for vhost as server or client. > > E.g., vhostuser port is created as server. > Thread1 calls rte_vhost_driver_unregister(). > Before the listen fd is deleted from poll waiting fds, > "vhost-events" thread then calls vhost_user_server_new_connection(), > then a new conn fd is added in fdset when trying to reconnect. > "vhost-events" thread then calls vhost_user_read_cb() and > accesses invalid memory of socket while thread1 frees the memory of > vsocket. > > E.g., vhostuser port is created as client. > Thread1 calls rte_vhost_driver_unregister(). > Before vsocket of reconn is deleted from reconn list, > "vhost_reconn" thread then calls vhost_user_add_connection() > then a new conn fd is added in fdset when trying to reconnect. > "vhost-events" thread then calls vhost_user_read_cb() and > accesses invalid memory of socket while thread1 frees the memory of > vsocket. > > The fix is to move the "fdset_try_del" in front of free memory of conn, > then avoid the race condition. > > The core trace is: > Program terminated with signal 11, Segmentation fault. > > Fixes: 52d874dc6705 ("vhost: fix crash on closing in client mode")
Please check comment/reply in v6. And a suggestion: Wait for comment/problem solved in old version before new version. It can save everyone's effort of tracking all versions.