From: Helge Deller <deller@gmx.de>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: linux-fbdev@vger.kernel.org, linux-usb@vger.kernel.org,
syzkaller-bugs@googlegroups.com
Subject: Re: [PATCH] video: udlfb: Fix endpoint check
Date: Fri, 19 May 2023 21:51:04 +0200 [thread overview]
Message-ID: <66b03070-08b0-0fb1-8693-aed77543b93e@gmx.de> (raw)
In-Reply-To: <0894f7ac-509f-435f-90ce-b55838ead65c@rowland.harvard.edu>
On 5/19/23 21:32, Alan Stern wrote:
> The syzbot fuzzer detected a problem in the udlfb driver, caused by an
> endpoint not having the expected type:
>
>
> usb 1-1: Read EDID byte 0 failed: -71
> usb 1-1: Unable to get valid EDID from device/display
> ------------[ cut here ]------------
> usb 1-1: BOGUS urb xfer, pipe 3 != type 1
> WARNING: CPU: 0 PID: 9 at drivers/usb/core/urb.c:504 usb_submit_urb+0xed6/0x1880
> drivers/usb/core/urb.c:504
> Modules linked in:
> CPU: 0 PID: 9 Comm: kworker/0:1 Not tainted
> 6.4.0-rc1-syzkaller-00016-ga4422ff22142 #0
> Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google
> 04/28/2023
> Workqueue: usb_hub_wq hub_event
> RIP: 0010:usb_submit_urb+0xed6/0x1880 drivers/usb/core/urb.c:504
> ...
> Call Trace:
> <TASK>
> dlfb_submit_urb+0x92/0x180 drivers/video/fbdev/udlfb.c:1980
> dlfb_set_video_mode+0x21f0/0x2950 drivers/video/fbdev/udlfb.c:315
> dlfb_ops_set_par+0x2a7/0x8d0 drivers/video/fbdev/udlfb.c:1111
> dlfb_usb_probe+0x149a/0x2710 drivers/video/fbdev/udlfb.c:1743
>
>
> The current approach for this issue failed to catch the problem
> because it only checks for the existence of a bulk-OUT endpoint; it
> doesn't check whether this endpoint is the one that the driver will
> actually use.
>
> We can fix the problem by instead checking that the endpoint used by
> the driver does exist and is bulk-OUT.
>
> Reported-and-tested-by: syzbot+0e22d63dcebb802b9bc8@syzkaller.appspotmail.com
> Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
> CC: Pavel Skripkin <paskripkin@gmail.com>
> Fixes: aaf7dbe07385 ("video: fbdev: udlfb: properly check endpoint type")
> CC: <stable@vger.kernel.org>
applied to fbdev git tree.
Thanks!
Helge
>
> ---
>
> drivers/video/fbdev/udlfb.c | 13 ++++++++-----
> 1 file changed, 8 insertions(+), 5 deletions(-)
>
> Index: usb-devel/drivers/video/fbdev/udlfb.c
> ===================================================================
> --- usb-devel.orig/drivers/video/fbdev/udlfb.c
> +++ usb-devel/drivers/video/fbdev/udlfb.c
> @@ -27,6 +27,8 @@
> #include <video/udlfb.h>
> #include "edid.h"
>
> +#define OUT_EP_NUM 1 /* The endpoint number we will use */
> +
> static const struct fb_fix_screeninfo dlfb_fix = {
> .id = "udlfb",
> .type = FB_TYPE_PACKED_PIXELS,
> @@ -1652,7 +1654,7 @@ static int dlfb_usb_probe(struct usb_int
> struct fb_info *info;
> int retval;
> struct usb_device *usbdev = interface_to_usbdev(intf);
> - struct usb_endpoint_descriptor *out;
> + static u8 out_ep[] = {OUT_EP_NUM + USB_DIR_OUT, 0};
>
> /* usb initialization */
> dlfb = kzalloc(sizeof(*dlfb), GFP_KERNEL);
> @@ -1666,9 +1668,9 @@ static int dlfb_usb_probe(struct usb_int
> dlfb->udev = usb_get_dev(usbdev);
> usb_set_intfdata(intf, dlfb);
>
> - retval = usb_find_common_endpoints(intf->cur_altsetting, NULL, &out, NULL, NULL);
> - if (retval) {
> - dev_err(&intf->dev, "Device should have at lease 1 bulk endpoint!\n");
> + if (!usb_check_bulk_endpoints(intf, out_ep)) {
> + dev_err(&intf->dev, "Invalid DisplayLink device!\n");
> + retval = -EINVAL;
> goto error;
> }
>
> @@ -1927,7 +1929,8 @@ retry:
> }
>
> /* urb->transfer_buffer_length set to actual before submit */
> - usb_fill_bulk_urb(urb, dlfb->udev, usb_sndbulkpipe(dlfb->udev, 1),
> + usb_fill_bulk_urb(urb, dlfb->udev,
> + usb_sndbulkpipe(dlfb->udev, OUT_EP_NUM),
> buf, size, dlfb_urb_completion, unode);
> urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
>
prev parent reply other threads:[~2023-05-19 19:51 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-18 4:12 [syzbot] [fbdev?] [usb?] WARNING in dlfb_submit_urb/usb_submit_urb (2) syzbot
2023-05-18 7:34 ` Helge Deller
2023-05-18 7:40 ` syzbot
2023-05-18 13:54 ` Alan Stern
2023-05-18 14:16 ` Helge Deller
2023-05-18 14:56 ` Alan Stern
2023-05-18 19:06 ` Helge Deller
2023-05-18 20:35 ` Alan Stern
2023-05-18 21:08 ` syzbot
2023-05-19 10:38 ` Helge Deller
2023-05-19 15:42 ` Alan Stern
2023-05-19 18:40 ` Helge Deller
2023-05-19 19:32 ` [PATCH] video: udlfb: Fix endpoint check Alan Stern
2023-05-19 19:51 ` Helge Deller [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=66b03070-08b0-0fb1-8693-aed77543b93e@gmx.de \
--to=deller@gmx.de \
--cc=linux-fbdev@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=stern@rowland.harvard.edu \
--cc=syzkaller-bugs@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).