[PATCH RFC POC 31/50] vfio: install the migration data descriptor when the ioctl returns

From: Christian Brauner

Date: Tue Sep 15 2026 - 07:55:43 EST


Rely on the fd exit path machinery.

Signed-off-by: Christian Brauner (Amutable) <brauner@xxxxxxxxxx>
---
drivers/vfio/vfio_main.c | 25 +++++++------------------
1 file changed, 7 insertions(+), 18 deletions(-)

diff --git a/drivers/vfio/vfio_main.c b/drivers/vfio/vfio_main.c
index 423ead48aafe..93d9d21f4074 100644
--- a/drivers/vfio/vfio_main.c
+++ b/drivers/vfio/vfio_main.c
@@ -903,28 +903,17 @@ EXPORT_SYMBOL_GPL(vfio_mig_get_next_state);
static int vfio_ioct_mig_return_fd(struct file *filp, void __user *arg,
struct vfio_device_feature_mig_state *mig)
{
- int ret;
- int fd;
+ FD_PREPARE(fdf, O_CLOEXEC, filp);

- fd = get_unused_fd_flags(O_CLOEXEC);
- if (fd < 0) {
- ret = fd;
- goto out_fput;
+ if (IS_ERR(fdf)) {
+ fput(filp);
+ return PTR_ERR(fdf);
}

- mig->data_fd = fd;
- if (copy_to_user(arg, mig, sizeof(*mig))) {
- ret = -EFAULT;
- goto out_put_unused;
- }
- fd_install(fd, filp);
+ mig->data_fd = fd_prepare_fd(fdf);
+ if (copy_to_user(arg, mig, sizeof(*mig)))
+ return -EFAULT;
return 0;
-
-out_put_unused:
- put_unused_fd(fd);
-out_fput:
- fput(filp);
- return ret;
}

static int

--
2.53.0