All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: syzbot <syzbot@kernel.org>
Cc: syzkaller-bugs@googlegroups.com,
	Aleksandr Nogikh <nogikh@google.com>,
	linux-usb@vger.kernel.org, Greg Kroah-Hartman <gregkh@suse.de>,
	kees@kernel.org, linux-kernel@vger.kernel.org,
	syzbot@lists.linux.dev
Subject: Re: [PATCH] usb: usbtest: fix NULL pointer dereference in usbtest_probe
Date: Mon, 3 Aug 2026 17:14:45 +0200	[thread overview]
Message-ID: <2026080322-obsessed-daringly-e6df@gregkh> (raw)
In-Reply-To: <2026080336-covenant-limpness-55cc@gregkh>

On Mon, Aug 03, 2026 at 05:13:00PM +0200, Greg Kroah-Hartman wrote:
> On Wed, Jul 29, 2026 at 09:19:54AM +0000, syzbot wrote:
> > From: Aleksandr Nogikh <nogikh@google.com>
> > 
> > The usbtest driver relies on the driver_info field of the usb_device_id
> > structure to hold a pointer to a struct usbtest_info, which contains
> > necessary configuration for the device. When a new device ID is dynamically
> > added via the sysfs new_id interface without specifying a reference device,
> > the driver_info field defaults to 0. When the USB core binds the device
> > using this dynamic ID, usbtest_probe() unconditionally casts the 0 to a
> > pointer, resulting in a NULL pointer dereference when attempting to access
> > the autoconf bitfield (at offset 0xa) of the struct usbtest_info.
> > 
> > This leads to the following crash:
> > 
> > Oops: general protection fault, probably for non-canonical address
> > 0xdffffc0000000001: 0000 [#1] SMP KASAN NOPTI
> > KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f]
> > RIP: 0010:usbtest_probe+0x522/0xcc0 drivers/usb/misc/usbtest.c:2822
> > Call Trace:
> >  <TASK>
> >  usb_probe_interface+0x653/0xc60 drivers/usb/core/driver.c:396
> >  call_driver_probe drivers/base/dd.c:-1 [inline]
> >  really_probe+0x254/0xae0 drivers/base/dd.c:706
> >  __driver_probe_device+0x1e8/0x360 drivers/base/dd.c:868
> >  driver_probe_device+0x4f/0x240 drivers/base/dd.c:898
> >  __device_attach_driver+0x270/0x410 drivers/base/dd.c:1026
> >  bus_for_each_drv+0x258/0x2f0 drivers/base/bus.c:500
> >  __device_attach+0x2c4/0x450 drivers/base/dd.c:1098
> >  device_initial_probe+0xa1/0xd0 drivers/base/dd.c:1153
> >  bus_probe_device+0x12a/0x220 drivers/base/bus.c:620
> >  device_add+0x7d7/0xb80 drivers/base/core.c:3772
> >  usb_set_configuration+0x1ad8/0x2180 drivers/usb/core/message.c:2268
> >  usb_generic_driver_probe+0x8d/0x150 drivers/usb/core/generic.c:250
> >  usb_probe_device+0x1c3/0x3b0 drivers/usb/core/driver.c:291
> > 
> > To fix this, validate that id->driver_info is not NULL before proceeding
> > with the probe. If it is NULL, gracefully return -ENODEV. The check is
> > placed before any memory allocation to avoid unnecessary work and simplify
> > error handling.
> > 
> > Fixes: 733260ff9c45 ("[PATCH] USB: add dynamic id functionality to USB core")

Not really, but I can see why the LLM thinks this.  It's "just how this
driver works" instead, right?

> > Assisted-by: Gemini:gemini-3.5-flash Gemini:gemini-3.1-pro-preview syzbot
> > Reported-by: syzbot+7e1e5911f9eac50bedc7@syzkaller.appspotmail.com
> > Closes: https://syzkaller.appspot.com/bug?extid=7e1e5911f9eac50bedc7
> > Link: https://syzkaller.appspot.com/ai_job?id=9e476ca5-99d1-47d2-b9d1-f3b501897179
> > Signed-off-by: Aleksandr Nogikh <nogikh@google.com>
> > 
> > ---
> > diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
> > index 98071b25a..6410b3e26 100644
> > --- a/drivers/usb/misc/usbtest.c
> > +++ b/drivers/usb/misc/usbtest.c
> > @@ -2786,10 +2786,13 @@ usbtest_probe(struct usb_interface *intf, const struct usb_device_id *id)
> >  	}
> >  #endif
> >  
> > +	info = (struct usbtest_info *) id->driver_info;
> 
> Extra space there, right?  Didn't checkpatch catch that?
> 
> And this really isn't the proper solution, just don't allow dynamic
> binding for this driver.  That should resolve it, right?

If you don't want to do that, you need a BIG comment here as to what you
are trying to prevent, as a NULL check just looks like any other normal
check, while you are trying to prevent a specific use case from being
possible, and it WILL have user-visable affect.

thanks,

greg k-h

  reply	other threads:[~2026-08-03 15:15 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-29  9:19 [PATCH] usb: usbtest: fix NULL pointer dereference in usbtest_probe syzbot
2026-08-03 15:13 ` Greg Kroah-Hartman
2026-08-03 15:14   ` Greg Kroah-Hartman [this message]
2026-08-05 14:12     ` Aleksandr Nogikh
2026-08-06 14:25     ` [PATCH v2] usb: usbtest: disable dynamic ID support Aleksandr Nogikh
2026-08-06 14:32       ` Greg Kroah-Hartman
2026-08-06 14:35         ` Aleksandr Nogikh
2026-08-06 14:42           ` Greg Kroah-Hartman
2026-08-06 15:30             ` Aleksandr Nogikh
2026-08-06 18:49       ` [syzbot ci] " syzbot ci
2026-08-06 15:26     ` [PATCH v3] " Aleksandr Nogikh
2026-08-06 19:43       ` [syzbot ci] " syzbot ci

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=2026080322-obsessed-daringly-e6df@gregkh \
    --to=gregkh@linuxfoundation.org \
    --cc=gregkh@suse.de \
    --cc=kees@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=nogikh@google.com \
    --cc=syzbot@kernel.org \
    --cc=syzbot@lists.linux.dev \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.