Commit 7d32e779 authored by Gerhard Engleder's avatar Gerhard Engleder Committed by Greg Kroah-Hartman

misc: keba: Fix sysfs group creation

sysfs_create_group() races with userspace. Use dev_groups instead which
prevents all the problems of sysfs_create_group().

Fixes: a1944676 ("misc: keba: Add basic KEBA CP500 system FPGA support")
Suggested-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarGerhard Engleder <eg@keba.com>
Link: https://lore.kernel.org/r/20240819192645.50171-1-gerhard@engleder-embedded.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a759d1f2
...@@ -212,12 +212,12 @@ static ssize_t keep_cfg_store(struct device *dev, struct device_attribute *attr, ...@@ -212,12 +212,12 @@ static ssize_t keep_cfg_store(struct device *dev, struct device_attribute *attr,
} }
static DEVICE_ATTR_RW(keep_cfg); static DEVICE_ATTR_RW(keep_cfg);
static struct attribute *attrs[] = { static struct attribute *cp500_attrs[] = {
&dev_attr_version.attr, &dev_attr_version.attr,
&dev_attr_keep_cfg.attr, &dev_attr_keep_cfg.attr,
NULL NULL
}; };
static const struct attribute_group attrs_group = { .attrs = attrs }; ATTRIBUTE_GROUPS(cp500);
static void cp500_i2c_release(struct device *dev) 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) ...@@ -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); 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); ret = cp500_enable(cp500);
if (ret != 0) if (ret != 0)
goto out_remove_group; goto out_free_irq;
cp500_register_auxiliary_devs(cp500); cp500_register_auxiliary_devs(cp500);
return 0; return 0;
out_remove_group:
sysfs_remove_group(&pci_dev->dev.kobj, &attrs_group);
out_free_irq: out_free_irq:
pci_free_irq_vectors(pci_dev); pci_free_irq_vectors(pci_dev);
out_disable: out_disable:
...@@ -427,8 +422,6 @@ static void cp500_remove(struct pci_dev *pci_dev) ...@@ -427,8 +422,6 @@ static void cp500_remove(struct pci_dev *pci_dev)
cp500_disable(cp500); cp500_disable(cp500);
sysfs_remove_group(&pci_dev->dev.kobj, &attrs_group);
pci_set_drvdata(pci_dev, 0); pci_set_drvdata(pci_dev, 0);
pci_free_irq_vectors(pci_dev); pci_free_irq_vectors(pci_dev);
...@@ -450,6 +443,7 @@ static struct pci_driver cp500_driver = { ...@@ -450,6 +443,7 @@ static struct pci_driver cp500_driver = {
.id_table = cp500_ids, .id_table = cp500_ids,
.probe = cp500_probe, .probe = cp500_probe,
.remove = cp500_remove, .remove = cp500_remove,
.dev_groups = cp500_groups,
}; };
module_pci_driver(cp500_driver); module_pci_driver(cp500_driver);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment