usb: dwc3: ep0: sanity check test mode selector
authorFei Yang <fei.yang@intel.com>
Wed, 20 Apr 2016 06:08:43 +0000 (09:08 +0300)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Thu, 28 Apr 2016 06:01:34 +0000 (09:01 +0300)
In case host sends us an unsupported test mode, we
*must* stall this request. This will tell the host
that the selector is invalid and we won't put the
controller in unsupported test modes which could
have undetermined side-effects.

Signed-off-by: Fei Yang <fei.yang@intel.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/dwc3/ep0.c

index 143deb420481001a229243ba65fe60e239930b7e..51b52a79dfecec3c06ff5849b5b761784c7b8a5d 100644 (file)
@@ -463,8 +463,18 @@ static int dwc3_ep0_handle_feature(struct dwc3 *dwc,
                        if (!set)
                                return -EINVAL;
 
-                       dwc->test_mode_nr = wIndex >> 8;
-                       dwc->test_mode = true;
+                       switch (wIndex >> 8) {
+                       case TEST_J:
+                       case TEST_K:
+                       case TEST_SE0_NAK:
+                       case TEST_PACKET:
+                       case TEST_FORCE_EN:
+                               dwc->test_mode_nr = wIndex >> 8;
+                               dwc->test_mode = true;
+                               break;
+                       default:
+                               return -EINVAL;
+                       }
                        break;
                default:
                        return -EINVAL;