]> git.proxmox.com Git - mirror_ubuntu-hirsute-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)
committerStefan Bader <stefan.bader@canonical.com>
Fri, 24 Sep 2021 09:57:37 +0000 (11:57 +0200)
commit57aa425176d8ea352653bf0af0778e15a0c2b0a4
tree27c08638754c0ed9cbc33aadb85ec2326a3c460a
parent1db75b69aaf0ff108484225cb2f2873a0e83587d
USB: core: Fix incorrect pipe calculation in do_proc_control()

BugLink: https://bugs.launchpad.net/bugs/1943756
[ Upstream commit b0863f1927323110e3d0d69f6adb6a91018a9a3c ]

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 5cc59c418fde ("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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
drivers/usb/core/devio.c