UPSTREAM: 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)
committerHuang, Tao <huangtao@rock-chips.com>
Tue, 16 Aug 2016 12:48:19 +0000 (20:48 +0800)
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.

Change-Id: Iaf6a0ae78864efa342a514fdd5e6fc7f2e94e314
Signed-off-by: Fei Yang <fei.yang@intel.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Wu Liang feng <wulf@rock-chips.com>
(cherry picked from commit ae411413760785a0a2ce6cb44d5afe95115aa24d)

drivers/usb/dwc3/ep0.c

index 12b0ec2b27127e6cefdb158be4217815fe6f0c92..e153e0262f816863dcc05f1e1002eae47df091af 100644 (file)
@@ -460,8 +460,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;