diff mbox series

[v2,2/2] USB: properly lock dynamic id list when showing an id

Message ID 2024111324-tubby-facecloth-d4a0@gregkh (mailing list archive)
State Accepted
Commit 81f5c72d041b92490261354a528b60e66ed2fa3b
Headers show
Series [v2,1/2] USB: make single lock for all usb dynamic id lists | expand

Commit Message

Greg KH Nov. 13, 2024, 6:49 a.m. UTC
When walking the list of dynamic ids for a driver, no lock was being
held, which meant that an id could be removed or added while the list
was being iterated.  Fix this up by properly grabing the lock while we
walk the list.

Reported-by: Alan Stern <stern@rowland.harvard.edu>
Cc: linux-usb@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
v2. - new patch in v2, not in v1 series, based on review of v1.

 drivers/usb/core/driver.c | 1 +
 1 file changed, 1 insertion(+)
diff mbox series

Patch

diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
index bc3c00580238..9ea955a3d115 100644
--- a/drivers/usb/core/driver.c
+++ b/drivers/usb/core/driver.c
@@ -116,6 +116,7 @@  ssize_t usb_show_dynids(struct usb_dynids *dynids, char *buf)
 	struct usb_dynid *dynid;
 	size_t count = 0;
 
+	guard(mutex)(&usb_dynids_lock);
 	list_for_each_entry(dynid, &dynids->list, node)
 		if (dynid->id.bInterfaceClass != 0)
 			count += scnprintf(&buf[count], PAGE_SIZE - count, "%04x %04x %02x\n",