summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorhselasky <hselasky@FreeBSD.org>2011-12-21 08:46:08 +0000
committerhselasky <hselasky@FreeBSD.org>2011-12-21 08:46:08 +0000
commitd26d94695993e318a8fa7ccaefdf7c8c9022ad8d (patch)
tree02f922d1b235e0c6861999961023edb2e9a5ac63 /sys
parent9a222cbb4c06161a806d8912cf934d60493ba235 (diff)
downloadFreeBSD-src-d26d94695993e318a8fa7ccaefdf7c8c9022ad8d.zip
FreeBSD-src-d26d94695993e318a8fa7ccaefdf7c8c9022ad8d.tar.gz
Fix for race against user-space applications trying to change the
configuration on USB HUBs. PR: kern/163091 MFC after: 1 week
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/usb/usb_hub.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/sys/dev/usb/usb_hub.c b/sys/dev/usb/usb_hub.c
index 8652661..168e9eb 100644
--- a/sys/dev/usb/usb_hub.c
+++ b/sys/dev/usb/usb_hub.c
@@ -707,6 +707,13 @@ uhub_explore(struct usb_device *udev)
DPRINTF("Device is suspended!\n");
return (0);
}
+
+ /*
+ * Make sure we don't race against user-space applications
+ * like LibUSB:
+ */
+ usbd_enum_lock(udev);
+
for (x = 0; x != hub->nports; x++) {
up = hub->ports + x;
portno = x + 1;
@@ -784,6 +791,8 @@ uhub_explore(struct usb_device *udev)
up->restartcnt = 0;
}
+ usbd_enum_unlock(udev);
+
/* initial status checked */
sc->sc_flags |= UHUB_FLAG_DID_EXPLORE;
OpenPOWER on IntegriCloud