USB: allow malformed LANGID descriptors
authorDaniel Mack <daniel@caiaq.de>
Fri, 20 Mar 2009 18:58:57 +0000 (19:58 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 24 Mar 2009 23:20:45 +0000 (16:20 -0700)
When an USB hardware does not provide a valid LANGID, fall back to value
zero which is still a reasonable default for most devices.

Signed-off-by: Daniel Mack <daniel@caiaq.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/core/message.c

index 293a30d..30a0690 100644 (file)
@@ -804,18 +804,16 @@ int usb_string(struct usb_device *dev, int index, char *buf, size_t size)
                        dev_err(&dev->dev,
                                "string descriptor 0 read error: %d\n",
                                err);
-                       goto errout;
                } else if (err < 4) {
                        dev_err(&dev->dev, "string descriptor 0 too short\n");
-                       err = -EINVAL;
-                       goto errout;
                } else {
-                       dev->have_langid = 1;
                        dev->string_langid = tbuf[2] | (tbuf[3] << 8);
                        /* always use the first langid listed */
                        dev_dbg(&dev->dev, "default language 0x%04x\n",
                                dev->string_langid);
                }
+
+               dev->have_langid = 1;
        }
 
        err = usb_string_sub(dev, dev->string_langid, index, tbuf);