Improper Locking Affecting linux-6.12 package, versions <6.12.100-1~deb12u1


Severity

Recommended
0.0
medium
0
10

Snyk's Security Team recommends NVD's CVSS assessment. Learn more

Threat Intelligence

EPSS
0.1% (1st percentile)

Do your applications use this vulnerable package?

In a few clicks we can analyze your entire application and see what components are vulnerable in your application, and suggest you quick fixes.

Test your applications
  • Snyk IDSNYK-ECHOLATEST-LINUX612-18579199
  • published7 Aug 2026
  • disclosed25 Jul 2026

Introduced: 25 Jul 2026

CVE-2026-64347  (opens in a new tab)
CWE-667  (opens in a new tab)

How to fix?

Upgrade Echo:latest linux-6.12 to version 6.12.100-1~deb12u1 or higher.

NVD Description

Note: Versions mentioned in the description apply only to the upstream linux-6.12 package and not the linux-6.12 package as distributed by Echo. See How to fix? for Echo:latest relevant fixed versions and status.

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-&gt;config)
    config = cdev-&gt;config;
else
    config = list_first_entry(&amp;cdev-&gt;configs,
                  struct usb_configuration, list);
if (!config)
    goto done;
...
memcpy(req-&gt;buf, config-&gt;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.

CVSS Base Scores

version 3.1