On Tue, Feb 14, 2023 at 02:02:37AM +0000, Liu, Yi L wrote: > > From: Jason Gunthorpe <jgg@xxxxxxxxxx> > > Sent: Tuesday, February 14, 2023 7:44 AM > > > > On Mon, Feb 13, 2023 at 07:13:36AM -0800, Yi Liu wrote: > > > +static struct vfio_device *vfio_device_from_file(struct file *file) > > > +{ > > > + struct vfio_device_file *df = file->private_data; > > > + > > > + if (file->f_op != &vfio_device_fops) > > > + return NULL; > > > + return df->device; > > > +} > > > + > > > /** > > > * vfio_file_is_valid - True if the file is usable with VFIO APIS > > > * @file: VFIO group file or VFIO device file > > > */ > > > bool vfio_file_is_valid(struct file *file) > > > { > > > - return vfio_group_from_file(file); > > > + return vfio_group_from_file(file) || > > > + vfio_device_from_file(file); > > > } > > > EXPORT_SYMBOL_GPL(vfio_file_is_valid); > > > > This can only succeed on a device cdev that has been fully opened. > > Actually, we cannot. This is used in the kvm-vfio code to see if the > user-provided fd is vfio fds in the SET_KVM path. And we don't > have the device cdev fully opened until BIND_IOMMUFD. But we do > need to invoke SET_KVM before issuing BIND_IOMMUFD as the device > open needs kvm pointer. So if we cannot apply fully opened limit to this > interface. Maybe an updated function comment is needed. This also seems sketchy, KVM is using the VFIO fd as a "proof" to enable the wbinvd stuff. A half opened cdev should not be used as that proof. Regardless it needs to be fixed for the pci usage. Jason