summaryrefslogtreecommitdiffstats
path: root/Documentation/driver-api/usb
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2021-05-26 17:32:44 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2021-05-27 13:46:21 +0200
commit7652dd2c5cb7b656471cc801d619fe24120643a3 (patch)
tree1df0b0a80088856a1f208a792c41558d7c4e611d /Documentation/driver-api/usb
parentusb: gadget: udc: udc-xilinx: Place correct function names into the headers (diff)
downloadlinux-7652dd2c5cb7b656471cc801d619fe24120643a3.tar.xz
linux-7652dd2c5cb7b656471cc801d619fe24120643a3.zip
USB: core: Check buffer length matches wLength for control transfers
A type of inconsistency that can show up in control URBs is when the setup packet's wLength value does not match the URB's transfer_buffer_length field. The two should always be equal; differences could lead to information leaks or undefined behavior for OUT transfers or overruns for IN transfers. This patch adds a test for such mismatches during URB submission. If the test fails, the submission is rejected with a -EBADR error code (which is not used elsewhere in the USB core), and a debugging message is logged for people interested in tracking down these errors. Reviewed-by: Johan Hovold <johan@kernel.org> Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Link: https://lore.kernel.org/r/20210526153244.GA1400430@rowland.harvard.edu Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'Documentation/driver-api/usb')
-rw-r--r--Documentation/driver-api/usb/error-codes.rst3
1 files changed, 3 insertions, 0 deletions
diff --git a/Documentation/driver-api/usb/error-codes.rst b/Documentation/driver-api/usb/error-codes.rst
index a3e84bfac776..8f9790c2d6f8 100644
--- a/Documentation/driver-api/usb/error-codes.rst
+++ b/Documentation/driver-api/usb/error-codes.rst
@@ -61,6 +61,9 @@ USB-specific:
(c) requested data transfer length is invalid: negative
or too large for the host controller.
+``-EBADR`` The wLength value in a control URB's setup packet does
+ not match the URB's transfer_buffer_length.
+
``-ENOSPC`` This request would overcommit the usb bandwidth reserved
for periodic transfers (interrupt, isochronous).