HIGH
usb-gadget UvcControlReq UAF
CVE-2026-89733
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
KernelScan AI7.0HIGH
01Description
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().
02KernelScan AI Analysis
Risk summary
A use-after-free vulnerability exists in the USB gadget UVC function driver where dangling pointers to a control request and buffer are not cleared after being freed in error and unbind paths. A local attacker who can trigger the UVC gadget bind error path or unbind sequence could exploit this to achieve kernel memory corruption, potentially leading to privilege escalation or denial of service.
Vulnerability analysis
In the USB gadget UVC function driver, the cleanup paths during function binding and unbinding both free a control request and its associated buffer but fail to clear the pointers that reference them. If later code accesses these stale pointers, it operates on already-freed kernel memory, causing a use-after-free condition. The fix clears both pointers immediately after freeing their resources in both cleanup paths, preventing any subsequent access to the freed memory. This vulnerability is reachable locally by an attacker who can configure or trigger the USB gadget UVC function, which typically requires privileges to set up gadget functions through the configuration filesystem.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 3.2 | 3.2.36 | 3.3 | ddb1b0d5d858 |
| 3.4 | 3.4.25 | 3.5 | 85dd5e8bd677 |
| 3.7 | 3.7.2 | 3.8 | 502a7f5b79b7 |
| 5.10 | — | 5.10.270 | bec7708eb3b5 |
| 5.15 | — | 5.15.221 | 8e88ed8a374d |
| 6.1 | — | 6.1.188 | 9897b7da8c0a |
| 6.12 | — | 6.12.109 | bdab5605259b |
| 6.18 | — | 6.18.50 | — |
| 6.6 | — | 6.6.157 | 38f822ddce93 |
| 7.2 | — | 7.2.4 | — |
| mainline | — | 7.3 | — |
| cip/5.10 | — | 5.10.271-cip78 | ddb1b0d5d858 |
| cip/6.1 | — | 6.1.189-cip61 | 502a7f5b79b7 |
| cip/6.1-rt | — | 6.1.189-cip61-rt32 | 502a7f5b79b7 |
| cip/6.12 | — | 6.12.111-cip32 | 8e88ed8a374d |
04CIP Kernels
State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.
| CIP tree | State |
|---|---|
| cip/6.12 | Fixed in 6.12.111-cip32 |
| cip/6.1 | Fixed in 6.1.189-cip61 |
| cip/6.1-rt | Fixed in 6.1.189-cip61-rt32 |
| cip/5.10 | Fixed in 5.10.271-cip78 |
| cip/5.10-rt | Affected — no CIP fix yet (latest 5.10.268-cip77-rt34) |