summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorthompsa <thompsa@FreeBSD.org>2010-02-14 19:59:19 +0000
committerthompsa <thompsa@FreeBSD.org>2010-02-14 19:59:19 +0000
commitadc6a97b0a915099ede3ee69a925119f58e41413 (patch)
tree471863356cb843b5c6d73f573020d5670533f88d
parent446bd534e931acc91d8374ff5de42e967079279f (diff)
downloadFreeBSD-src-adc6a97b0a915099ede3ee69a925119f58e41413.zip
FreeBSD-src-adc6a97b0a915099ede3ee69a925119f58e41413.tar.gz
Make umodem more tolerant for devices which modem descriptors are misplaced.
Reported by: Erick Wales Submitted by: Hans Petter Selasky
-rw-r--r--sys/dev/usb/serial/umodem.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/sys/dev/usb/serial/umodem.c b/sys/dev/usb/serial/umodem.c
index 6945e79..39afdad 100644
--- a/sys/dev/usb/serial/umodem.c
+++ b/sys/dev/usb/serial/umodem.c
@@ -312,11 +312,16 @@ umodem_attach(device_t dev)
0 - 1, UDESCSUB_CDC_UNION, 0 - 1);
if ((cud == NULL) || (cud->bLength < sizeof(*cud))) {
- device_printf(dev, "no CM or union descriptor\n");
- goto detach;
+ device_printf(dev, "Missing descriptor. "
+ "Assuming data interface is next.\n");
+ if (sc->sc_ctrl_iface_no == 0xFF)
+ goto detach;
+ else
+ sc->sc_data_iface_no =
+ sc->sc_ctrl_iface_no + 1;
+ } else {
+ sc->sc_data_iface_no = cud->bSlaveInterface[0];
}
-
- sc->sc_data_iface_no = cud->bSlaveInterface[0];
} else {
sc->sc_data_iface_no = cmd->bDataInterface;
}
OpenPOWER on IntegriCloud