⬢ DragonFlyBSD Kernel Audit
DF-5383 / fix.diff
← back to finding ↓ download raw
--- a/sys/bus/u4b/serial/umcs.h
+++ b/sys/bus/u4b/serial/umcs.h
@@ -30,7 +30,14 @@
 #define	UMCS7840_MAX_PORTS	4
 
 #define	UMCS7840_READ_LENGTH	1	/* bytes */
-#define	UMCS7840_CTRL_TIMEOUT	500	/* ms */
+/*
+ * DF-5383: 500 ms per control request allowed an evil device to stretch
+ * umcs7840_cfg_open()'s 28-request chain (and cfg_close's 4) to ~14 s of
+ * uninterruptible usb_proc_mwait()/usb_proc_drain() stall.  100 ms bounds
+ * the whole open/close sequence to ~3 s while remaining two orders of
+ * magnitude above a healthy device's control-transfer latency.
+ */
+#define	UMCS7840_CTRL_TIMEOUT	100	/* ms */
 
 /* Read/Wrtire registers vendor commands */
 #define	MCS7840_RDREQ		0x0d