]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
um: vfio: Prevent duplicate device assignments
authorTiwei Bie <tiwei.btw@antgroup.com>
Fri, 6 Jun 2025 12:44:27 +0000 (20:44 +0800)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 25 Jun 2025 07:26:06 +0000 (09:26 +0200)
Ensure devices are assigned only once. Reject subsequent requests
for duplicate assignments.

Fixes: a0e2cb6a9063 ("um: Add VFIO-based virtual PCI driver")
Signed-off-by: Tiwei Bie <tiwei.btw@antgroup.com>
Link: https://patch.msgid.link/20250606124428.148164-4-tiwei.btw@antgroup.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
arch/um/drivers/vfio_kern.c

index b51fc9888ae197c71587118e27a1fb14d8e9b254..13b971a2bd438c84600313a6c883045c539d8513 100644 (file)
@@ -570,6 +570,17 @@ static void uml_vfio_release_device(struct uml_vfio_device *dev)
        kfree(dev);
 }
 
+static struct uml_vfio_device *uml_vfio_find_device(const char *device)
+{
+       struct uml_vfio_device *dev;
+
+       list_for_each_entry(dev, &uml_vfio_devices, list) {
+               if (!strcmp(dev->name, device))
+                       return dev;
+       }
+       return NULL;
+}
+
 static int uml_vfio_cmdline_set(const char *device, const struct kernel_param *kp)
 {
        struct uml_vfio_device *dev;
@@ -582,6 +593,9 @@ static int uml_vfio_cmdline_set(const char *device, const struct kernel_param *k
                uml_vfio_container.fd = fd;
        }
 
+       if (uml_vfio_find_device(device))
+               return -EEXIST;
+
        dev = kzalloc(sizeof(*dev), GFP_KERNEL);
        if (!dev)
                return -ENOMEM;