PCI: endpoint: Fix NULL pointer dereference error when CONFIGFS is disabled
Subsystems (2)
PATCH 1/1 PCI: endpoint: Fix NULL pointer dereference error when CONFIGFS is disabled
commit ef1433f717a2c63747a519d86965d73 ("PCI: endpoint: Create configfs entry for each pci_epf_device_id table entry") while adding configfs entry for each pci_epf_device_id table entry introduced a NULL pointer dereference error when CONFIG_PCI_ENDPOINT_CONFIGFS is not enabled. Fix it here.
entry for each pci_epf_device_id table entry")
--- drivers/pci/endpoint/pci-epf-core.c | 62 ++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 19 deletions(-)
drivers/pci/endpoint/pci-epf-core.c +43 -19
@@ -137,25 +137,60 @@ void *pci_epf_alloc_space(struct pci_epf *epf, size_t size, enum pci_barno bar) }EXPORT_SYMBOL_GPL (pci_epf_alloc_space); -/** -* pci_epf_unregister_driver() - unregister the PCI EPF driver -* @driver: the PCI EPF driver that has to be unregistered -* -* Invoke to unregister the PCI EPF driver. -*/ -void pci_epf_unregister_driver (struct pci_epf_driver *driver) +static void pci_epf_remove_cfs (struct pci_epf_driver *driver) {struct config_group *group; +if (!IS_ENABLED (CONFIG_PCI_ENDPOINT_CONFIGFS )) +return ; +mutex_lock (&pci_epf_mutex);list_for_each_entry (group, &driver->epf_group, group_entry)pci_ep_cfs_remove_epf_group (group);list_del (&driver->epf_group);mutex_unlock (&pci_epf_mutex); +} + +/** +* pci_epf_unregister_driver() - unregister the PCI EPF driver +* @driver: the PCI EPF driver that has to be unregistered +* +* Invoke to unregister the PCI EPF driver. +*/ +void pci_epf_unregister_driver (struct pci_epf_driver *driver) +{ +pci_epf_remove_cfs (driver);driver_unregister (&driver->driver); }EXPORT_SYMBOL_GPL (pci_epf_unregister_driver); +static int pci_epf_add_cfs (struct pci_epf_driver *driver) +{ +struct config_group *group; +const struct pci_epf_device_id *id; + +if (!IS_ENABLED (CONFIG_PCI_ENDPOINT_CONFIGFS )) +return 0 ; + +INIT_LIST_HEAD (&driver->epf_group); + + id = driver->id_table; +while (id->name[0 ]) { + group =pci_ep_cfs_add_epf_group (id->name); +if (IS_ERR (group)) { +pci_epf_remove_cfs (driver); +return PTR_ERR (group); + } + +mutex_lock (&pci_epf_mutex); +list_add_tail (&group->group_entry, &driver->epf_group); +mutex_unlock (&pci_epf_mutex); + id++; + } + +return 0 ; +} +/** * __pci_epf_register_driver() - register a new PCI EPF driver * @driver: structure representing PCI EPF driver
@@ -167,8 +202,6 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver, struct module *owner) {int ret; -struct config_group *group; -const struct pci_epf_device_id *id;if (!driver->ops)return -EINVAL ;
@@ -183,16 +216,7 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver,if (ret)return ret; -INIT_LIST_HEAD (&driver->epf_group); - - id = driver->id_table; -while (id->name[0 ]) { - group =pci_ep_cfs_add_epf_group (id->name); -mutex_lock (&pci_epf_mutex); -list_add_tail (&group->group_entry, &driver->epf_group); -mutex_unlock (&pci_epf_mutex); - id++; - } +pci_epf_add_cfs (driver);return 0 ; }
Signature · 1 line
2.17.1
Lorenzo Pieralisi
AppliedQuoted 6 lines · Kishon Vijay Abraham I
commit
ef1433f717a2c63747a519d86965d73("PCI: endpoint: Create configfs entry for eachpci_epf_device_idtable entry") while adding configfs entry for eachpci_epf_device_idtable entry introduced a NULL pointer dereference error whenCONFIG_PCI_ENDPOINT_CONFIGFSis not enabled. Fix it here.
Quoted 7 lines
Fixes ef1433f717a2c63747a519d86965d73 ("PCI: endpoint: Create configfsentry for each
pci_epf_device_idtable entry")Signed-off-by Kishon Vijay Abraham I <[email protected]>--- drivers/pci/endpoint/pci-epf-core.c | 62 ++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 19 deletions(-)
Applied to pci/controller-fixes, to be sent tentatively for one of the upcoming -rc*, thanks.
Lorenzo
Quoted 102 lines
drivers/pci/endpoint/pci-epf-core.c +43
-19@@ -137,25 +137,60 @@ void *pci_epf_alloc_space(struct pci_epf *epf, size_t size, enum pci_barno bar) }EXPORT_SYMBOL_GPL (pci_epf_alloc_space); -/** -* pci_epf_unregister_driver() - unregister the PCI EPF driver -* @driver: the PCI EPF driver that has to be unregistered -* -* Invoke to unregister the PCI EPF driver. -*/ -void pci_epf_unregister_driver (struct pci_epf_driver *driver) +static void pci_epf_remove_cfs (struct pci_epf_driver *driver) {struct config_group *group; +if (!IS_ENABLED (CONFIG_PCI_ENDPOINT_CONFIGFS )) +return ; +mutex_lock (&pci_epf_mutex);list_for_each_entry (group, &driver->epf_group, group_entry)pci_ep_cfs_remove_epf_group (group);list_del (&driver->epf_group);mutex_unlock (&pci_epf_mutex); +} + +/** +* pci_epf_unregister_driver() - unregister the PCI EPF driver +* @driver: the PCI EPF driver that has to be unregistered +* +* Invoke to unregister the PCI EPF driver. +*/ +void pci_epf_unregister_driver (struct pci_epf_driver *driver) +{ +pci_epf_remove_cfs (driver);driver_unregister (&driver->driver); }EXPORT_SYMBOL_GPL (pci_epf_unregister_driver); +static int pci_epf_add_cfs (struct pci_epf_driver *driver) +{ +struct config_group *group; +const struct pci_epf_device_id *id; + +if (!IS_ENABLED (CONFIG_PCI_ENDPOINT_CONFIGFS )) +return 0 ; + +INIT_LIST_HEAD (&driver->epf_group); + + id = driver->id_table; +while (id->name[0 ]) { + group =pci_ep_cfs_add_epf_group (id->name); +if (IS_ERR (group)) { +pci_epf_remove_cfs (driver); +return PTR_ERR (group); + } + +mutex_lock (&pci_epf_mutex); +list_add_tail (&group->group_entry, &driver->epf_group); +mutex_unlock (&pci_epf_mutex); + id++; + } + +return 0 ; +} +/** * __pci_epf_register_driver() - register a new PCI EPF driver * @driver: structure representing PCI EPF driver @@ -167,8 +202,6 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver, struct module *owner) {int ret; -struct config_group *group; -const struct pci_epf_device_id *id;if (!driver->ops)return -EINVAL ;@@ -183,16 +216,7 @@ int __pci_epf_register_driver(struct pci_epf_driver *driver,if (ret)return ret; -INIT_LIST_HEAD (&driver->epf_group); - - id = driver->id_table; -while (id->name[0 ]) { - group =pci_ep_cfs_add_epf_group (id->name); -mutex_lock (&pci_epf_mutex); -list_add_tail (&group->group_entry, &driver->epf_group); -mutex_unlock (&pci_epf_mutex); - id++; - } +pci_epf_add_cfs (driver);return 0 ; }Signature · 1 line
2.17.1