ZeroHour

CVE-2026-89733

niche

Use-after-free in Linux kernel USB gadget UVC driver (f_uvc) bind/unbind paths

CVSS 3.1
7.8 high
EPSS
Published
()
Modified
AI analysis

The Linux kernel's USB Video Class (UVC) gadget driver (f_uvc) fails to NULL the uvc->control_req and uvc->control_buf pointers after freeing them in the error path of uvc_function_bind() and in uvc_function_unbind(), leaving dangling pointers and a use-after-free condition. A local attacker with low privileges who can trigger a gadget bind failure or an unbind/rebind sequence (for example, tearing down or reconfiguring a configfs-based USB gadget) could cause the kernel to act on freed memory, potentially escalating privileges to root with high impact on confidentiality, integrity, and availability (CVSS 3.1: 7.8). Only systems that actually enable the UVC gadget function are exposed — typically embedded Linux devices configured to present themselves as USB webcams — since standard desktop and server distributions do not enable this driver by default. No public proof-of-concept exists, the flaw is not in CISA's KEV catalog, and no exploitation is known to be occurring.

What to do: Apply kernel updates that include the f_uvc dangling-pointer fix and reboot affected devices. Verify exposure by checking whether the usb_f_uvc module is loaded or CONFIG_USB_CONFIGFS_F_UVC is enabled (e.g., lsmod | grep usb_f_uvc); if the UVC gadget function is not needed, disable or blacklist the module. On embedded devices that do use it, restrict which users/processes can unbind and rebind gadget functions and monitor kernel logs for oopses referencing uvc_function_bind or uvc_function_unbind.

Affected
Linux kernel (USB gadget UVC function, drivers/usb/gadget/function/f_uvc.c)Kernel versions prior to the fixing commit; the advisory does not specify exact fixed version numbers
Estimated exposure
nicheunknown (limited to embedded Linux devices that enable the f_uvc USB gadget function) — The UVC gadget driver is not enabled in stock distribution kernels and is used mainly in custom embedded builds that emulate USB webcams, so there is no reliable public install-base or scan-based figure.

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

In the Linux kernel, the following vulnerability has been resolved: usb: gadget: uvc: fix dangling pointers in uvc_function_bind() and uvc_function_unbind() In uvc_function_bind() error path, we use usb_ep_free_request which uses uvc->control_req but does not set it to NULL afterwards. Thus, uvc->control_req is a dangling pointer causing a UAF. Also we do not set the uvc->control_buf pointer to NULL after freeing it, which is another dangling pointer. Fix it by setting uvc->control_req to NULL after we run usb_ep_free_request() and uvc->control_buf to NULL after kfree. Do the same for uvc_function_unbind().

Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

In the news

No ingested article mentions this CVE yet.