]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
vfio/xe: Fix use-after-free in xe_vfio_pci_alloc_file()
authorAlper Ak <alperyasinak1@gmail.com>
Thu, 25 Dec 2025 15:13:49 +0000 (18:13 +0300)
committerAlex Williamson <alex@shazbot.org>
Sun, 28 Dec 2025 19:42:46 +0000 (12:42 -0700)
migf->filp is accessed after migf has been freed. Save the error
value before calling kfree() to prevent use-after-free.

Fixes: 1f5556ec8b9e ("vfio/xe: Add device specific vfio_pci driver variant for Intel graphics")
Signed-off-by: Alper Ak <alperyasinak1@gmail.com>
Link: https://lore.kernel.org/r/20251225151349.360870-1-alperyasinak1@gmail.com
Signed-off-by: Alex Williamson <alex@shazbot.org>
drivers/vfio/pci/xe/main.c

index 719ab466008561b42e7b77a6e7fb43a60cb410fd..2a5eb9260ec7b5bdca4833c1f1dec6785724eae2 100644 (file)
@@ -250,6 +250,7 @@ xe_vfio_pci_alloc_file(struct xe_vfio_pci_core_device *xe_vdev,
        struct xe_vfio_pci_migration_file *migf;
        const struct file_operations *fops;
        int flags;
+       int ret;
 
        migf = kzalloc(sizeof(*migf), GFP_KERNEL_ACCOUNT);
        if (!migf)
@@ -259,8 +260,9 @@ xe_vfio_pci_alloc_file(struct xe_vfio_pci_core_device *xe_vdev,
        flags = type == XE_VFIO_FILE_SAVE ? O_RDONLY : O_WRONLY;
        migf->filp = anon_inode_getfile("xe_vfio_mig", fops, migf, flags);
        if (IS_ERR(migf->filp)) {
+               ret = PTR_ERR(migf->filp);
                kfree(migf);
-               return ERR_CAST(migf->filp);
+               return ERR_PTR(ret);
        }
 
        mutex_init(&migf->lock);