Commit 5cc59c41 authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman

USB: core: WARN if pipe direction != setup packet direction

When a control URB is submitted, the direction indicated by URB's pipe
member is supposed to match the direction indicated by the setup
packet's bRequestType member.  A mismatch could lead to trouble,
depending on which field the host controller drivers use for
determining the actual direction.

This shouldn't ever happen; it would represent a careless bug in a
kernel driver somewhere.  This patch adds a dev_WARN_ONCE to let
people know about the potential problem.
Suggested-by: default avatar"Geoffrey D. Bennett" <g@b4.vu>
Reviewed-by: default avatarJohan Hovold <johan@kernel.org>
Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Link: https://lore.kernel.org/r/20210522021623.GB1260282@rowland.harvard.eduSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 7257fbc7
...@@ -407,6 +407,9 @@ int usb_submit_urb(struct urb *urb, gfp_t mem_flags) ...@@ -407,6 +407,9 @@ int usb_submit_urb(struct urb *urb, gfp_t mem_flags)
return -ENOEXEC; return -ENOEXEC;
is_out = !(setup->bRequestType & USB_DIR_IN) || is_out = !(setup->bRequestType & USB_DIR_IN) ||
!setup->wLength; !setup->wLength;
dev_WARN_ONCE(&dev->dev, (usb_pipeout(urb->pipe) != is_out),
"BOGUS control dir, pipe %x doesn't match bRequestType %x\n",
urb->pipe, setup->bRequestType);
} else { } else {
is_out = usb_endpoint_dir_out(&ep->desc); is_out = usb_endpoint_dir_out(&ep->desc);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment