usb: fix regression in SuperSpeed endpoint descriptor parsing
authorMathias Nyman <mathias.nyman@linux.intel.com>
Tue, 29 Mar 2016 10:47:09 +0000 (13:47 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 31 Mar 2016 04:57:58 +0000 (21:57 -0700)
commit59b9023c356c54e5f468029fa504461d04c0f02b
tree95839eb474a8ed6be47c853ea217f0035e79d613
parentb348d7dddb6c4fbfc810b7a0626e8ec9e29f7cbb
usb: fix regression in SuperSpeed endpoint descriptor parsing

commit b37d83a6a414 ("usb: Parse the new USB 3.1 SuperSpeedPlus Isoc
endpoint companion descriptor") caused a regression in 4.6-rc1 and fails
to parse SuperSpeed endpoint companion descriptors.

The new SuperSpeedPlus Isoc endpoint companion parsing code incorrectly
decreased the the remaining buffer size before comparing the size with the
expected length of the descriptor.

This lead to possible failure in reading the SuperSpeed endpoint companion
descriptor of the last endpoint, displaying a message like:

"No SuperSpeed endpoint companion for config 1 interface 0 altsetting 0
 ep 129: using minimum values"

Fix it by decreasing the size after comparing it.
Also finish all the SS endpoint companion parsing before calling SSP isoc
endpoint parsing function.

Fixes: b37d83a6a414
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/core/config.c