summaryrefslogtreecommitdiff
path: root/drivers/usb/serial
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2009-10-05 15:53:58 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2009-10-22 15:11:49 -0700
commit1a0da0e58df9667ec9b77c4c222a380c23344977 (patch)
treeaa4cdb0f0505069d14e3ff3fa8b38bfdbd1a3133 /drivers/usb/serial
parent3d22a3e78eaef3c53f63b9010b1cee4533a9fe59 (diff)
USB: ipaq: fix oops when device is plugged in
commit 06bad89da686f6323e95cf925105e8cf88d87caf upstream. This patch (as1293) fixes a problem with the ipaq serial driver. It tries to bind to all the interfaces, even those that don't have enough endpoints. The symptom is an invalid memory reference and oops when the device is plugged in. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Tested-by: Matthias Geissert <geissert@mathematik.tu-darmstadt.de> Tested-by: Tilman Schmidt <tilman@imap.cc> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/serial')
-rw-r--r--drivers/usb/serial/ipaq.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c
index 2545d45ce16f..c4d02064e5f1 100644
--- a/drivers/usb/serial/ipaq.c
+++ b/drivers/usb/serial/ipaq.c
@@ -971,6 +971,15 @@ static int ipaq_calc_num_ports(struct usb_serial *serial)
static int ipaq_startup(struct usb_serial *serial)
{
dbg("%s", __func__);
+
+ /* Some of the devices in ipaq_id_table[] are composite, and we
+ * shouldn't bind to all the interfaces. This test will rule out
+ * some obviously invalid possibilities.
+ */
+ if (serial->num_bulk_in < serial->num_ports ||
+ serial->num_bulk_out < serial->num_ports)
+ return -ENODEV;
+
if (serial->dev->actconfig->desc.bConfigurationValue != 1) {
/*
* FIXME: HP iPaq rx3715, possibly others, have 1 config that