]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
misc: keba: Fix sysfs group creation
authorGerhard Engleder <eg@keba.com>
Mon, 19 Aug 2024 19:26:45 +0000 (21:26 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 3 Sep 2024 10:37:29 +0000 (12:37 +0200)
sysfs_create_group() races with userspace. Use dev_groups instead which
prevents all the problems of sysfs_create_group().

Fixes: a1944676767e ("misc: keba: Add basic KEBA CP500 system FPGA support")
Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Gerhard Engleder <eg@keba.com>
Link: https://lore.kernel.org/r/20240819192645.50171-1-gerhard@engleder-embedded.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/misc/keba/cp500.c

index 9ba46f0f93926c5270f8bef86db153ca290a88b7..ae09228178810c7710c57888c9f9b5b6866b6aab 100644 (file)
@@ -212,12 +212,12 @@ static ssize_t keep_cfg_store(struct device *dev, struct device_attribute *attr,
 }
 static DEVICE_ATTR_RW(keep_cfg);
 
-static struct attribute *attrs[] = {
+static struct attribute *cp500_attrs[] = {
        &dev_attr_version.attr,
        &dev_attr_keep_cfg.attr,
        NULL
 };
-static const struct attribute_group attrs_group = { .attrs = attrs };
+ATTRIBUTE_GROUPS(cp500);
 
 static void cp500_i2c_release(struct device *dev)
 {
@@ -396,20 +396,15 @@ static int cp500_probe(struct pci_dev *pci_dev, const struct pci_device_id *id)
 
        pci_set_drvdata(pci_dev, cp500);
 
-       ret = sysfs_create_group(&pci_dev->dev.kobj, &attrs_group);
-       if (ret != 0)
-               goto out_free_irq;
 
        ret = cp500_enable(cp500);
        if (ret != 0)
-               goto out_remove_group;
+               goto out_free_irq;
 
        cp500_register_auxiliary_devs(cp500);
 
        return 0;
 
-out_remove_group:
-       sysfs_remove_group(&pci_dev->dev.kobj, &attrs_group);
 out_free_irq:
        pci_free_irq_vectors(pci_dev);
 out_disable:
@@ -427,8 +422,6 @@ static void cp500_remove(struct pci_dev *pci_dev)
 
        cp500_disable(cp500);
 
-       sysfs_remove_group(&pci_dev->dev.kobj, &attrs_group);
-
        pci_set_drvdata(pci_dev, 0);
 
        pci_free_irq_vectors(pci_dev);
@@ -450,6 +443,7 @@ static struct pci_driver cp500_driver = {
        .id_table = cp500_ids,
        .probe = cp500_probe,
        .remove = cp500_remove,
+       .dev_groups = cp500_groups,
 };
 module_pci_driver(cp500_driver);