mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
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: "Geoffrey D. Bennett" <g@b4.vu> Reviewed-by: Johan Hovold <johan@kernel.org> Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Link: https://lore.kernel.org/r/20210522021623.GB1260282@rowland.harvard.edu Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
7257fbc7c5
commit
5cc59c418f
1 changed files with 3 additions and 0 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue