mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 21:57:43 +00:00
vfio: Move vfio_device_group_unregister() to be the first operation in unregister
This avoids endless vfio_device refcount increment by userspace, which would keep blocking the vfio_unregister_group_dev(). Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> Tested-by: Nicolin Chen <nicolinc@nvidia.com> Tested-by: Matthew Rosato <mjrosato@linux.ibm.com> Tested-by: Yanting Jiang <yanting.jiang@intel.com> Tested-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com> Tested-by: Terrence Xu <terrence.xu@intel.com> Tested-by: Zhenzhong Duan <zhenzhong.duan@intel.com> Signed-off-by: Yi Liu <yi.l.liu@intel.com> Link: https://lore.kernel.org/r/20230718135551.6592-17-yi.l.liu@intel.com Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
parent
8cfa718602
commit
291872a533
1 changed files with 6 additions and 2 deletions
|
@ -332,6 +332,12 @@ void vfio_unregister_group_dev(struct vfio_device *device)
|
|||
bool interrupted = false;
|
||||
long rc;
|
||||
|
||||
/*
|
||||
* Prevent new device opened by userspace via the
|
||||
* VFIO_GROUP_GET_DEVICE_FD in the group path.
|
||||
*/
|
||||
vfio_device_group_unregister(device);
|
||||
|
||||
vfio_device_put_registration(device);
|
||||
rc = try_wait_for_completion(&device->comp);
|
||||
while (rc <= 0) {
|
||||
|
@ -355,8 +361,6 @@ void vfio_unregister_group_dev(struct vfio_device *device)
|
|||
}
|
||||
}
|
||||
|
||||
vfio_device_group_unregister(device);
|
||||
|
||||
/* Balances device_add in register path */
|
||||
device_del(&device->device);
|
||||
|
||||
|
|
Loading…
Reference in a new issue