From 37297e3472d59ef884ff39e929c318f1fa8ad4d4 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: May 25 2023 07:19:36 +0000 Subject: USB: usbtmc: Fix direction for 0-length ioctl control messages (git-fixes). --- diff --git a/patches.suse/USB-usbtmc-Fix-direction-for-0-length-ioctl-control-.patch b/patches.suse/USB-usbtmc-Fix-direction-for-0-length-ioctl-control-.patch new file mode 100644 index 0000000..2a64a11 --- /dev/null +++ b/patches.suse/USB-usbtmc-Fix-direction-for-0-length-ioctl-control-.patch @@ -0,0 +1,70 @@ +From 94d25e9128988c6a1fc9070f6e98215a95795bd8 Mon Sep 17 00:00:00 2001 +From: Alan Stern +Date: Mon, 1 May 2023 14:22:35 -0400 +Subject: [PATCH] USB: usbtmc: Fix direction for 0-length ioctl control messages +Git-commit: 94d25e9128988c6a1fc9070f6e98215a95795bd8 +Patch-mainline: v6.4-rc3 +References: git-fixes + +The syzbot fuzzer found a problem in the usbtmc driver: When a user +submits an ioctl for a 0-length control transfer, the driver does not +check that the direction is set to OUT: + +Acked-by: Takashi Iwai + +------------[ cut here ]------------ +usb 3-1: BOGUS control dir, pipe 80000b80 doesn't match bRequestType fd +WARNING: CPU: 0 PID: 5100 at drivers/usb/core/urb.c:411 usb_submit_urb+0x14a7/0x1880 drivers/usb/core/urb.c:411 +Modules linked in: +CPU: 0 PID: 5100 Comm: syz-executor428 Not tainted 6.3.0-syzkaller-12049-g58390c8ce1bd #0 +Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/14/2023 +RIP: 0010:usb_submit_urb+0x14a7/0x1880 drivers/usb/core/urb.c:411 +Code: 7c 24 40 e8 1b 13 5c fb 48 8b 7c 24 40 e8 21 1d f0 fe 45 89 e8 44 89 f1 4c 89 e2 48 89 c6 48 c7 c7 e0 b5 fc 8a e8 19 c8 23 fb <0f> 0b e9 9f ee ff ff e8 ed 12 5c fb 0f b6 1d 12 8a 3c 08 31 ff 41 +RSP: 0018:ffffc90003d2fb00 EFLAGS: 00010282 +RAX: 0000000000000000 RBX: ffff8880789e9058 RCX: 0000000000000000 +RDX: ffff888029593b80 RSI: ffffffff814c1447 RDI: 0000000000000001 +RBP: ffff88801ea742f8 R08: 0000000000000001 R09: 0000000000000000 +R10: 0000000000000001 R11: 0000000000000001 R12: ffff88802915e528 +R13: 00000000000000fd R14: 0000000080000b80 R15: ffff8880222b3100 +FS: 0000555556ca63c0(0000) GS:ffff8880b9800000(0000) knlGS:0000000000000000 +CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 +CR2: 00007f9ef4d18150 CR3: 0000000073e5b000 CR4: 00000000003506f0 +DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 +DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 +Call Trace: + + usb_start_wait_urb+0x101/0x4b0 drivers/usb/core/message.c:58 + usb_internal_control_msg drivers/usb/core/message.c:102 [inline] + usb_control_msg+0x320/0x4a0 drivers/usb/core/message.c:153 + usbtmc_ioctl_request drivers/usb/class/usbtmc.c:1954 [inline] + usbtmc_ioctl+0x1b3d/0x2840 drivers/usb/class/usbtmc.c:2097 + +To fix this, we must override the direction in the bRequestType field +of the control request structure when the length is 0. + +Reported-and-tested-by: syzbot+ce77725b89b7bd52425c@syzkaller.appspotmail.com +Signed-off-by: Alan Stern +Link: https://lore.kernel.org/linux-usb/000000000000716a3705f9adb8ee@google.com/ +CC: +Link: https://lore.kernel.org/r/ede1ee02-b718-49e7-a44c-51339fec706b@rowland.harvard.edu +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/class/usbtmc.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/usb/class/usbtmc.c b/drivers/usb/class/usbtmc.c +index 4bb6d304eb4b..311007b1d904 100644 +--- a/drivers/usb/class/usbtmc.c ++++ b/drivers/usb/class/usbtmc.c +@@ -1928,6 +1928,8 @@ static int usbtmc_ioctl_request(struct usbtmc_device_data *data, + + if (request.req.wLength > USBTMC_BUFSIZE) + return -EMSGSIZE; ++ if (request.req.wLength == 0) /* Length-0 requests are never IN */ ++ request.req.bRequestType &= ~USB_DIR_IN; + + is_in = request.req.bRequestType & USB_DIR_IN; + +-- +2.35.3 + diff --git a/series.conf b/series.conf index 58924be..95a7a99 100644 --- a/series.conf +++ b/series.conf @@ -20154,6 +20154,7 @@ patches.suse/drm-msm-dp-unregister-audio-driver-during-unbind.patch patches.suse/drm-msm-dpu-Move-non-MDP_TOP-INTF_INTR-offsets-out-o.patch patches.suse/drm-msm-dpu-Remove-duplicate-register-defines-from-I.patch + patches.suse/USB-usbtmc-Fix-direction-for-0-length-ioctl-control-.patch patches.suse/usb-dwc3-gadget-Improve-dwc3_gadget_suspend-and-dwc3.patch patches.suse/usb-dwc3-debugfs-Resume-dwc3-before-accessing-regist.patch patches.suse/usb-typec-altmodes-displayport-fix-pin_assignment_sh.patch