From f8f56d6a1dce29eeaf1523fe4a0c490fe3bc1a3b Mon Sep 17 00:00:00 2001 From: Mayank Rana Date: Tue, 1 Sep 2015 11:55:51 -0700 Subject: 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 --- drivers/usb/gadget/composite.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'drivers/usb/gadget/composite.c') 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: -- cgit v1.2.3