> From: Jason Gunthorpe <j...@nvidia.com>
> Sent: Friday, July 14, 2023 9:37 PM
> 
> On Mon, Jul 10, 2023 at 07:31:25PM -0700, Yi Liu wrote:
> 
> > @@ -1311,29 +1296,17 @@ static int vfio_pci_ioctl_get_pci_hot_reset_info(
> >     ret = vfio_pci_for_each_slot_or_bus(vdev->pdev, vfio_pci_fill_devs,
> >                                         &fill, slot);
> >     mutex_unlock(&vdev->vdev.dev_set->lock);
> > +   if (ret)
> > +           return ret;
> >
> > -   /*
> > -    * If a device was removed between counting and filling, we may come up
> > -    * short of fill.max.  If a device was added, we'll have a return of
> > -    * -EAGAIN above.
> > -    */
> > -   if (!ret) {
> > -           hdr.count = fill.cur;
> > -           hdr.flags = fill.flags;
> > -   }
> > -
> > -reset_info_exit:
> > +   hdr.count = fill.count;
> > +   hdr.flags = fill.flags;
> >     if (copy_to_user(arg, &hdr, minsz))
> > -           ret = -EFAULT;
> > -
> > -   if (!ret) {
> > -           if (copy_to_user(&arg->devices, devices,
> > -                            hdr.count * sizeof(*devices)))
> > -                   ret = -EFAULT;
> > -   }
> > +           return -EFAULT;
> >
> > -   kfree(devices);
> > -   return ret;
> > +   if (fill.count != fill.devices - arg->devices)
> > +           return -ENOSPC;
> 
> This should be > right? The previous code returned ENOSPC only if
> their were more devices than requested, not less.

Yes. it is.

Regards,
Yi Liu

Reply via email to