KernelScan.io

HIGH

usb-gadget UvcControlReq UAF

CVE-2026-89733

CVSS 7.8 / 10.0 NVD

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

KernelScan AI7.0HIGH

01

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().

02

Engine v0.6.0

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.

Affecteddrivers/usb/gadget/function/f_uvc.c (USB gadget UVC function)

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.

03

BranchIntroducedFixed inPatch commit
3.23.2.363.3ddb1b0d5d858
3.43.4.253.585dd5e8bd677
3.73.7.23.8502a7f5b79b7
5.10—5.10.270bec7708eb3b5
5.15—5.15.2218e88ed8a374d
6.1—6.1.1889897b7da8c0a
6.12—6.12.109bdab5605259b
6.18—6.18.50—
6.6—6.6.15738f822ddce93
7.2—7.2.4—
mainline—7.3—
cip/5.10—5.10.271-cip78ddb1b0d5d858
cip/6.1—6.1.189-cip61502a7f5b79b7
cip/6.1-rt—6.1.189-cip61-rt32502a7f5b79b7
cip/6.12—6.12.111-cip328e88ed8a374d

04

State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.

CIP treeState
cip/6.12Fixed in 6.12.111-cip32
cip/6.1Fixed in 6.1.189-cip61
cip/6.1-rtFixed in 6.1.189-cip61-rt32
cip/5.10Fixed in 5.10.271-cip78
cip/5.10-rtAffected — no CIP fix yet (latest 5.10.268-cip77-rt34)