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....@antgroup.com>
---
 arch/um/drivers/vfio_kern.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/arch/um/drivers/vfio_kern.c b/arch/um/drivers/vfio_kern.c
index b51fc9888ae1..13b971a2bd43 100644
--- a/arch/um/drivers/vfio_kern.c
+++ b/arch/um/drivers/vfio_kern.c
@@ -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;
-- 
2.34.1


Reply via email to