* [PATCH v3 0/2] Fix EPF configfs attribute group removal
@ 2025-06-24 11:45 Damien Le Moal
2025-06-24 11:45 ` [PATCH v3 1/2] PCI: endpoint: Fix configfs group list head handling Damien Le Moal
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Damien Le Moal @ 2025-06-24 11:45 UTC (permalink / raw)
To: linux-pci, Manivannan Sadhasivam, Krzysztof Wilczyński,
Kishon Vijay Abraham I, Bjorn Helgaas
Cc: Niklas Cassel
A couple of patches to fix removal of configfs attribute groups of a PCI
endpoint function driver.
Changes from v2:
- Use list_del() instead of list_del_init() in patch 2
- Added Niklas' review tags
Changes from v1:
- Split out patch 1 from patch 2 as requested by Niklas.
Damien Le Moal (2):
PCI: endpoint: Fix configfs group list head handling
PCI: endpoint: Fix configfs group removal on driver teardown
drivers/pci/endpoint/pci-ep-cfs.c | 1 +
drivers/pci/endpoint/pci-epf-core.c | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
--
2.49.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v3 1/2] PCI: endpoint: Fix configfs group list head handling
2025-06-24 11:45 [PATCH v3 0/2] Fix EPF configfs attribute group removal Damien Le Moal
@ 2025-06-24 11:45 ` Damien Le Moal
2025-06-24 11:45 ` [PATCH v3 2/2] PCI: endpoint: Fix configfs group removal on driver teardown Damien Le Moal
2025-06-25 22:10 ` [PATCH v3 0/2] Fix EPF configfs attribute group removal Manivannan Sadhasivam
2 siblings, 0 replies; 4+ messages in thread
From: Damien Le Moal @ 2025-06-24 11:45 UTC (permalink / raw)
To: linux-pci, Manivannan Sadhasivam, Krzysztof Wilczyński,
Kishon Vijay Abraham I, Bjorn Helgaas
Cc: Niklas Cassel
Doing a list_del() on the epf_group field of struct pci_epf_driver in
pci_epf_remove_cfs() is not correct as this field is a list head, not
a list entry. This list_del() call triggers a KASAN warning when an
endpoint function driver which has a configfs attribute group is torn
down:
==================================================================
BUG: KASAN: slab-use-after-free in pci_epf_remove_cfs+0x17c/0x198
Write of size 8 at addr ffff00010f4a0d80 by task rmmod/319
CPU: 3 UID: 0 PID: 319 Comm: rmmod Not tainted 6.16.0-rc2 #1 NONE
Hardware name: Radxa ROCK 5B (DT)
Call trace:
show_stack+0x2c/0x84 (C)
dump_stack_lvl+0x70/0x98
print_report+0x17c/0x538
kasan_report+0xb8/0x190
__asan_report_store8_noabort+0x20/0x2c
pci_epf_remove_cfs+0x17c/0x198
pci_epf_unregister_driver+0x18/0x30
nvmet_pci_epf_cleanup_module+0x24/0x30 [nvmet_pci_epf]
__arm64_sys_delete_module+0x264/0x424
invoke_syscall+0x70/0x260
el0_svc_common.constprop.0+0xac/0x230
do_el0_svc+0x40/0x58
el0_svc+0x48/0xdc
el0t_64_sync_handler+0x10c/0x138
el0t_64_sync+0x198/0x19c
...
Remove this incorrect list_del() call from pci_epf_remove_cfs().
Fixes: ef1433f717a2 ("PCI: endpoint: Create configfs entry for each pci_epf_device_id table entry")
Cc: stable@vger.kernel.org
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Niklas Cassel <cassel@kernel.org>
---
drivers/pci/endpoint/pci-epf-core.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/pci/endpoint/pci-epf-core.c b/drivers/pci/endpoint/pci-epf-core.c
index 577a9e490115..defc6aecfdef 100644
--- a/drivers/pci/endpoint/pci-epf-core.c
+++ b/drivers/pci/endpoint/pci-epf-core.c
@@ -338,7 +338,6 @@ static void pci_epf_remove_cfs(struct pci_epf_driver *driver)
mutex_lock(&pci_epf_mutex);
list_for_each_entry_safe(group, tmp, &driver->epf_group, group_entry)
pci_ep_cfs_remove_epf_group(group);
- list_del(&driver->epf_group);
mutex_unlock(&pci_epf_mutex);
}
--
2.49.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v3 2/2] PCI: endpoint: Fix configfs group removal on driver teardown
2025-06-24 11:45 [PATCH v3 0/2] Fix EPF configfs attribute group removal Damien Le Moal
2025-06-24 11:45 ` [PATCH v3 1/2] PCI: endpoint: Fix configfs group list head handling Damien Le Moal
@ 2025-06-24 11:45 ` Damien Le Moal
2025-06-25 22:10 ` [PATCH v3 0/2] Fix EPF configfs attribute group removal Manivannan Sadhasivam
2 siblings, 0 replies; 4+ messages in thread
From: Damien Le Moal @ 2025-06-24 11:45 UTC (permalink / raw)
To: linux-pci, Manivannan Sadhasivam, Krzysztof Wilczyński,
Kishon Vijay Abraham I, Bjorn Helgaas
Cc: Niklas Cassel
An endpoint driver configfs attributes group is added to the
epf_group list of struct pci_epf_driver by pci_epf_add_cfs() but an
added group is not removed from this list when the attribute group is
unregistered with pci_ep_cfs_remove_epf_group().
Add the missing list_del() call in pci_ep_cfs_remove_epf_group()
to correctly remove the attribute group from the driver list.
With this change, once the loop over all attribute groups in
pci_epf_remove_cfs() completes, the driver epf_group list should be
empty. Add a WARN_ON() to make sure of that.
Fixes: ef1433f717a2 ("PCI: endpoint: Create configfs entry for each pci_epf_device_id table entry")
Cc: stable@vger.kernel.org
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Niklas Cassel <cassel@kernel.org>
---
drivers/pci/endpoint/pci-ep-cfs.c | 1 +
drivers/pci/endpoint/pci-epf-core.c | 1 +
2 files changed, 2 insertions(+)
diff --git a/drivers/pci/endpoint/pci-ep-cfs.c b/drivers/pci/endpoint/pci-ep-cfs.c
index d712c7a866d2..ef50c82e647f 100644
--- a/drivers/pci/endpoint/pci-ep-cfs.c
+++ b/drivers/pci/endpoint/pci-ep-cfs.c
@@ -691,6 +691,7 @@ void pci_ep_cfs_remove_epf_group(struct config_group *group)
if (IS_ERR_OR_NULL(group))
return;
+ list_del(&group->group_entry);
configfs_unregister_default_group(group);
}
EXPORT_SYMBOL(pci_ep_cfs_remove_epf_group);
diff --git a/drivers/pci/endpoint/pci-epf-core.c b/drivers/pci/endpoint/pci-epf-core.c
index defc6aecfdef..167dc6ee63f7 100644
--- a/drivers/pci/endpoint/pci-epf-core.c
+++ b/drivers/pci/endpoint/pci-epf-core.c
@@ -338,6 +338,7 @@ static void pci_epf_remove_cfs(struct pci_epf_driver *driver)
mutex_lock(&pci_epf_mutex);
list_for_each_entry_safe(group, tmp, &driver->epf_group, group_entry)
pci_ep_cfs_remove_epf_group(group);
+ WARN_ON(!list_empty(&driver->epf_group));
mutex_unlock(&pci_epf_mutex);
}
--
2.49.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v3 0/2] Fix EPF configfs attribute group removal
2025-06-24 11:45 [PATCH v3 0/2] Fix EPF configfs attribute group removal Damien Le Moal
2025-06-24 11:45 ` [PATCH v3 1/2] PCI: endpoint: Fix configfs group list head handling Damien Le Moal
2025-06-24 11:45 ` [PATCH v3 2/2] PCI: endpoint: Fix configfs group removal on driver teardown Damien Le Moal
@ 2025-06-25 22:10 ` Manivannan Sadhasivam
2 siblings, 0 replies; 4+ messages in thread
From: Manivannan Sadhasivam @ 2025-06-25 22:10 UTC (permalink / raw)
To: linux-pci, Krzysztof Wilczyński, Kishon Vijay Abraham I,
Bjorn Helgaas, Damien Le Moal
Cc: Niklas Cassel
On Tue, 24 Jun 2025 20:45:42 +0900, Damien Le Moal wrote:
> A couple of patches to fix removal of configfs attribute groups of a PCI
> endpoint function driver.
>
> Changes from v2:
> - Use list_del() instead of list_del_init() in patch 2
> - Added Niklas' review tags
>
> [...]
Applied, thanks!
[1/2] PCI: endpoint: Fix configfs group list head handling
commit: d79123d79a8154b4318529b7b2ff7e15806f480b
[2/2] PCI: endpoint: Fix configfs group removal on driver teardown
commit: 910bdb8197f9322790c738bb32feaa11dba26909
Best regards,
--
Manivannan Sadhasivam <mani@kernel.org>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-06-25 22:10 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-24 11:45 [PATCH v3 0/2] Fix EPF configfs attribute group removal Damien Le Moal
2025-06-24 11:45 ` [PATCH v3 1/2] PCI: endpoint: Fix configfs group list head handling Damien Le Moal
2025-06-24 11:45 ` [PATCH v3 2/2] PCI: endpoint: Fix configfs group removal on driver teardown Damien Le Moal
2025-06-25 22:10 ` [PATCH v3 0/2] Fix EPF configfs attribute group removal Manivannan Sadhasivam
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.