diff options
author | Mayank Rana <mrana@codeaurora.org> | 2015-09-01 11:55:51 -0700 |
---|---|---|
committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-22 11:02:53 -0700 |
commit | f8f56d6a1dce29eeaf1523fe4a0c490fe3bc1a3b (patch) | |
tree | f198cc1a6df86c3c84d5b0425c88af3d67da4073 /drivers/usb/gadget/composite.c | |
parent | bdf0a2e431e52bc00858f1df8b109d6254fe3e13 (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.c | 6 |
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: |