USB: usb_get_string should check the descriptor type
authorAlan Stern <stern@rowland.harvard.edu>
Fri, 20 Feb 2009 21:33:08 +0000 (16:33 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 27 Feb 2009 22:40:50 +0000 (14:40 -0800)
commit67f5a4ba9741fcef3f4db3509ad03565d9e33af2
treebf27a10cfe13a95144e04cd50136a8f55e3b2a3c
parent54b9ed35aea88b05d711884a3c2dc21bba047bd8
USB: usb_get_string should check the descriptor type

This patch (as1218) fixes a problem with a radio-control joystick used
in the "walkera 4#3" helicopter.  This device responds to the initial
Get-String-Descriptor request for string 0 (which is really the list
of supported languages) by sending its config descriptor!  The
usb_get_string() routine needs to check whether it got the right
type of descriptor.

Oddly enough, this sort of check is already present in
usb_get_descriptor().  The patch changes the error code from -EPROTO
to -ENODATA, because -EPROTO shows up in so many other contexts to
indicate a hardware failure rather than a firmware error.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Tested-by: Guillermo Jarabo <williamjap@gmail.com>
Cc: stable <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
===================================================================
drivers/usb/core/message.c