summaryrefslogtreecommitdiff
path: root/drivers/usb/core/hub.c
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2016-08-23 19:32:51 (GMT)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-08-23 20:35:20 (GMT)
commit53e5f36fbd2453ad69a3369a1db62dc06c30a4aa (patch)
treec9f3dae00c6bec6bfc129754e37397533718ad1e /drivers/usb/core/hub.c
parent6c73358c83ce870c0cf32413e5cadb3b9a39c606 (diff)
downloadlinux-53e5f36fbd2453ad69a3369a1db62dc06c30a4aa.tar.xz
USB: avoid left shift by -1
UBSAN complains about a left shift by -1 in proc_do_submiturb(). This can occur when an URB is submitted for a bulk or control endpoint on a high-speed device, since the code doesn't bother to check the endpoint type; normally only interrupt or isochronous endpoints have a nonzero bInterval value. Aside from the fact that the operation is illegal, it shouldn't matter because the result isn't used. Still, in theory it could cause a hardware exception or other problem, so we should work around it. This patch avoids doing the left shift unless the shift amount is >= 0. The same piece of code has another problem. When checking the device speed (the exponential encoding for interrupt endpoints is used only by high-speed or faster devices), we need to look for speed >= USB_SPEED_SUPER as well as speed == USB_SPEED HIGH. The patch adds this check. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Reported-by: Vittorio Zecca <zeccav@gmail.com> Tested-by: Vittorio Zecca <zeccav@gmail.com> Suggested-by: Bjørn Mork <bjorn@mork.no> CC: <stable@vger.kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/core/hub.c')
0 files changed, 0 insertions, 0 deletions