summaryrefslogtreecommitdiff
path: root/drivers/usb/gadget/composite.c
diff options
context:
space:
mode:
authorMayank Rana <mrana@codeaurora.org>2015-09-01 11:55:51 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-22 11:02:53 -0700
commitf8f56d6a1dce29eeaf1523fe4a0c490fe3bc1a3b (patch)
treef198cc1a6df86c3c84d5b0425c88af3d67da4073 /drivers/usb/gadget/composite.c
parentbdf0a2e431e52bc00858f1df8b109d6254fe3e13 (diff)
gadget: composite: Fix crash seen when SS descriptor is not available
In some cases, composite device may have multiple interfaces and one of interface may not support USB super speed functionality. When host is trying to enumerate this composite device into super speed mode by sending SET_CONFIG(1), it results into crash due to ss descriptors are not available for particular interface. Hence add check against ss descriptors and fail SET_CONFIG(1). This results into some of host try to re-enumerate USB composite device with only interface which support super speed mode. Change-Id: Ib909f3d451e247c0415863689711e66b15fa2fa5 Signed-off-by: Mayank Rana <mrana@codeaurora.org>
Diffstat (limited to 'drivers/usb/gadget/composite.c')
-rw-r--r--drivers/usb/gadget/composite.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index 37552a6cae98..420fae593b0a 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -797,6 +797,12 @@ static int set_config(struct usb_composite_dev *cdev,
*/
switch (gadget->speed) {
case USB_SPEED_SUPER:
+ if (!f->ss_descriptors) {
+ pr_err("%s(): No SS desc for function:%s\n",
+ __func__, f->name);
+ usb_gadget_set_state(gadget, USB_STATE_ADDRESS);
+ return -EINVAL;
+ }
descriptors = f->ss_descriptors;
break;
case USB_SPEED_HIGH: