mirror of https://gitee.com/openkylin/linux.git
USB: cdc-acm: signedness fix
Fix bogus assignment of "unsigned char *" to "char *": preserve unsignedness. These values are used directly as descriptor lengths when iterating through the buffer, so this *could* cause oddness that potentially includes oopsing. (IMO not likely, except as part of a malicious device...) Fix the bogus warning in CDC ACM which highlighted this problem (by showing a negative descriptor type). It uses the undesirable legacy err() for something that's not even an error; switch to use dev_dbg, and show descriptor types in hex notation to match the convention for such codes. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Acked-by: Oliver Neukum <oneukum@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
08177e12b7
commit
c6dbf554bc
|
@ -804,7 +804,7 @@ static int acm_probe (struct usb_interface *intf,
|
|||
{
|
||||
struct usb_cdc_union_desc *union_header = NULL;
|
||||
struct usb_cdc_country_functional_desc *cfd = NULL;
|
||||
char *buffer = intf->altsetting->extra;
|
||||
unsigned char *buffer = intf->altsetting->extra;
|
||||
int buflen = intf->altsetting->extralen;
|
||||
struct usb_interface *control_interface;
|
||||
struct usb_interface *data_interface;
|
||||
|
@ -881,9 +881,13 @@ static int acm_probe (struct usb_interface *intf,
|
|||
if ((call_management_function & 3) != 3)
|
||||
err("This device cannot do calls on its own. It is no modem.");
|
||||
break;
|
||||
|
||||
default:
|
||||
err("Ignoring extra header, type %d, length %d", buffer[2], buffer[0]);
|
||||
/* there are LOTS more CDC descriptors that
|
||||
* could legitimately be found here.
|
||||
*/
|
||||
dev_dbg(&intf->dev, "Ignoring descriptor: "
|
||||
"type %02x, length %d\n",
|
||||
buffer[2], buffer[0]);
|
||||
break;
|
||||
}
|
||||
next_desc:
|
||||
|
|
Loading…
Reference in New Issue