CVE-2026-31726: usb: gadget: uvc: fix NULL pointer dereference during unbind race

Published May 1, 2026
·
Updated

In the Linux kernel, the following vulnerability has been resolved:

usb: gadget: uvc: fix NULL pointer dereference during unbind race

Commit b81ac4395bbe ("usb: gadget: uvc: allow for application to cleanly shutdown") introduced two stages of synchronization waits totaling 1500ms in uvcfunctionunbind() to prevent several types of kernel panics. However, this timing-based approach is insufficient during power management (PM) transitions.

When the PM subsystem starts freezing user space processes, the waiteventinterruptibletimeout() is aborted early, which allows the unbind thread to proceed and nullify the gadget pointer (cdev->gadget = NULL):

[ 814.123447][ T947] configfs-gadget.g1 gadget.0: uvc: uvcfunctionunbind() [ 814.178583][ T3173] PM: suspend entry (deep) [ 814.192487][ T3173] Freezing user space processes [ 814.197668][ T947] configfs-gadget.g1 gadget.0: uvc: uvcfunctionunbind no clean disconnect, wait for release

When the PM subsystem resumes or aborts the suspend and tasks are restarted, the V4L2 release path is executed and attempts to access the already nullified gadget pointer, triggering a kernel panic:

[ 814.292597][ C0] PM: pmsystemirqwakeup: 479 triggered dhdpciehostwake [ 814.386727][ T3173] Restarting tasks ... [ 814.403522][ T4558] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000030 [ 814.404021][ T4558] pc : usbgadgetdeactivate+0x14/0xf4 [ 814.404031][ T4558] lr : usbfunctiondeactivate+0x54/0x94 [ 814.404078][ T4558] Call trace: [ 814.404080][ T4558] usbgadgetdeactivate+0x14/0xf4 [ 814.404083][ T4558] usbfunctiondeactivate+0x54/0x94 [ 814.404087][ T4558] uvcfunctiondisconnect+0x1c/0x5c [ 814.404092][ T4558] uvcv4l2release+0x44/0xac [ 814.404095][ T4558] v4l2release+0xcc/0x130

Address the race condition and NULL pointer dereference by:

1. State Synchronization (flag + mutex) Introduce a 'funcunbound' flag in struct uvcdevice. This allows uvcfunctiondisconnect() to safely skip accessing the nullified cdev->gadget pointer. As suggested by Alan Stern, this flag is protected by a new mutex (uvc->lock) to ensure proper memory ordering and prevent instruction reordering or speculative loads. This mutex is also used to protect 'funcconnected' for consistent state management.

2. Explicit Synchronization (completion) Use a completion to synchronize uvcfunctionunbind() with the uvcvdevrelease() callback. This prevents Use-After-Free (UAF) by ensuring struct uvcdevice is freed after all video device resources are released.

Affected Software

14 affected components
Linux Linux kernel
Linux Linux kernel>=5.10.117<5.10.253
Linux Linux kernel>=5.15.41<5.15.203
Linux Linux kernel>=5.18<6.1.168
Linux Linux kernel>=6.2<6.6.134
Linux Linux kernel>=6.7<6.12.81
Linux Linux kernel>=6.13<6.18.22
Linux Linux kernel>=6.19<6.19.12
Linux Linux kernel=7.0-rc1
Linux Linux kernel=7.0-rc2
Linux Linux kernel=7.0-rc3
Linux Linux kernel=7.0-rc4
Linux Linux kernel=7.0-rc5
Linux Linux kernel=7.0-rc6

Event History

May 1, 2026
CVE Published
via MITRE·02:14 PM
Data Sourced
via MITRE·02:14 PM
Description
Data Sourced
via NVD·03:16 PM
RemedyDescriptionSeverityWeaknessAffected Software

Frequently Asked Questions

1

Which systems are exposed to this issue?

Systems using the Linux USB gadget UVC function are exposed when its unbind path can race with a power-management suspend transition and the V4L2 release path. The reported impact is a kernel panic, resulting in denial of service.

2

What access or conditions are needed to trigger the vulnerability?

The CVSS vector indicates local access and low privileges are required, with no user interaction. The failure depends on an unbind operation occurring while power management freezes user-space processes, followed by task restart and V4L2 release processing.

3

Is a default Linux installation known to be affected?

The available information does not establish that default configurations are affected. The vulnerable path specifically involves the USB gadget UVC function, so systems not using that functionality are not identified as exposed by the provided data.

4

How can administrators identify a possible occurrence?

Review kernel logs for UVC unbind activity during suspend, including messages such as "uvc_function_unbind no clean disconnect, wait for release," followed by a panic after the system resumes or aborts suspend. The described failure occurs when the V4L2 release path accesses a gadget pointer that has already been cleared.

5

What should be done to remediate it?

Apply the available Linux kernel patch. The provided references identify stable kernel commits containing the fix.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203