CVE-2026-64347

usb: gadget: composite: fix dead empty check in the USB_DT_OTG handler

MEDIUM
5.5
CVSS Score
Published: July 25, 2026 at 08:50 AM UTC
Updated: September 3, 2026 at 04:24 PM UTC
1 product affected across 1 vendorLinux Kernel

Using Linux by Linux?

Get instant alerts when new vulnerabilities affect Linux - before attackers find them.

Real-time alertsTrack your software stackFree plan available
Severity
MEDIUM5.5
Exploit prediction
EPSS 0.1%

Description

In the Linux kernel, the following vulnerability has been resolved: usb: gadget: composite: fix dead empty check in the USB_DT_OTG handler The OTG branch of composite_setup() falls back to the first configuration when none is selected: if (cdev->config) config = cdev->config; else config = list_first_entry(&cdev->configs, struct usb_configuration, list); if (!config) goto done; ... memcpy(req->buf, config->descriptors[0], value); list_first_entry() never returns NULL. On an empty list it returns container_of() of the list head. So the "if (!config)" check is dead. When cdev->configs is empty, config points at the head inside struct usb_composite_dev. config->descriptors[0] reads whatever sits at that offset. The memcpy copies up to w_length bytes of it into the response buffer. cdev->configs can be empty in two cases. One is a teardown race on gadget unbind with a control transfer in flight. The other is a driver that sets is_otg before it adds a config. A reproducer that holds cdev->configs empty triggers a KASAN fault in this branch. Use list_first_entry_or_null() so the existing check does its job.

Affected

Our own answer: ranges merged, affected separated from platform-only, with confidence and review flags.

4.3 ≤ v < 5.10.2614.3 ≤ v < 5.15.2124.3 ≤ v < 6.1.1784.3 ≤ v < 6.12.964.3 ≤ v < 6.18.394.3 ≤ v < 6.6.1454.3 ≤ v < 7.1.44.3 ≤ v < 7.25.11 ≤ v < 5.15.2125.16 ≤ v < 6.1.1786.13 ≤ v < 6.18.396.19 ≤ v < 7.1.46.2 ≤ v < 6.6.1456.7 ≤ v < 6.12.9653e6242db8d60da0587d36951cc9434d1a1c21dd7.2 rc17.2 rc2
Vendor states this is fixed in 01feaf024f29618d5ffa7ab0fd858e0579dcbf7b (fixed)
Vendor states this is fixed in 2454264b2ab4cf0055c0bfd39e79f830452bd0db (fixed)
Vendor states this is fixed in 56add2b9b2e89ec61c0761165d758f73004fdfdf (fixed)
Vendor states this is fixed in 8ac463fe6c0f85bdb1ce8c30e8c9e060802e4483 (fixed)
Vendor states this is fixed in 91b3ecd34b60f950c50c560974945b6596a6f207 (fixed)
Vendor states this is fixed in d3e72cfef2e38bd588055739a8100d14f9773b17 (fixed)
Vendor states this is fixed in f8f680609c2b3ab795ffcd6f21585b6dfc46d395 (fixed)
Vendor states this is fixed in fcb21bf747640c9d6bd1eda9da85420f076d59c1 (fixed)
Vendor states this is fixed in 4.3 (unaffected)
Vendor states this is fixed in 5.10.261 (unaffected)
Vendor states this is fixed in 5.15.212 (unaffected)
Vendor states this is fixed in 6.1.178 (unaffected)
Vendor states this is fixed in 6.12.96 (unaffected)
Vendor states this is fixed in 6.18.39 (unaffected)
Vendor states this is fixed in 6.6.145 (unaffected)
Vendor states this is fixed in 7.1.4 (unaffected)
Vendor states this is fixed in 7.2 (unaffected)

CVSS

Attack Vector
LOCAL
Complexity
LOW
Privileges
LOW
User Interaction
NONE
Scope
UNCHANGED
Confidentiality
NONE
Integrity
NONE
Availability
HIGH
Vector?

Quick Info

StatusANALYZED
CWE
CWE-667

Get alerted

Stop reading CVE feeds looking for your own stack

Track the products you run and VulnTracker tells you when a new CVE affects them — with what is known about fixing it, and nothing about the rest.

Free plan, no card