]> git.baikalelectronics.ru Git - kernel.git/commit
USB: core: Fix incorrect pipe calculation in do_proc_control()
authorAlan Stern <stern@rowland.harvard.edu>
Mon, 12 Jul 2021 18:54:36 +0000 (14:54 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 12 Jul 2021 18:59:40 +0000 (20:59 +0200)
commitc01b7546a9beb39a8dbefa5c58b4819e014fa22a
tree0659d5be21b29a727afacd573a3d73b7f768eed9
parent01da9c8979f3d24bb75ef7080a8d9915e88dff94
USB: core: Fix incorrect pipe calculation in do_proc_control()

When the user submits a control URB via usbfs, the user supplies the
bRequestType value and the kernel uses it to compute the pipe value.
However, do_proc_control() performs this computation incorrectly in
the case where the bRequestType direction bit is set to USB_DIR_IN and
the URB's transfer length is 0: The pipe's direction is also set to IN
but it should be OUT, which is the direction the actual transfer will
use regardless of bRequestType.

Commit e560d55f3d38 ("USB: core: WARN if pipe direction != setup
packet direction") added a check to compare the direction bit in the
pipe value to a control URB's actual direction and to WARN if they are
different.  This can be triggered by the incorrect computation
mentioned above, as found by syzbot.

This patch fixes the computation, thus avoiding the WARNing.

Reported-and-tested-by: syzbot+72af3105289dcb4c055b@syzkaller.appspotmail.com
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Link: https://lore.kernel.org/r/20210712185436.GB326369@rowland.harvard.edu
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/core/devio.c