Skip to main content
VulnerabilityPublished Updated

CVE-2026-64346: Linux kernel · usb: gadget: udc: Fix use-after-free in gadget_match_driver

Affects Linux kernelSource CVE Database V5

0
Compare

Not known to be exploited · fixed in d026f71df141c9b064ff32a78af5391a31ef75c2 : update Linux kernel when convenient.

Data as of 6 Nov 2026, 17:04 UTC

Severity
Unrated

Rated by Threat Radar · No CVSS score from NVD or the CNA

Thin evidence

One scorer or none
CISA SSVC
Exploitation
No evidence of active exploitation and no public proof of concept
Automatable
Attackers cannot reliably automate steps 1–4 of the kill chain
Technical impact
Limited control over the software or limited information exposure

CISA SSVC assessment, 2026-11-06.

Patch
Available – fixed in d026f71df141c9b064ff32a78af5391a31ef75c2, b52476a83d9e12df00765359d728a875b128bef1, 67e511d2989eb1c8c588b599ce2fcc6bb8e6f7ea +3

Exploitation evidence

  1. Disclosed: evidence found.

    CVE published 25 Jul 2026

  2. Detectable: no evidence on record.

    No public nuclei template indexed

  3. Weaponized: no evidence on record.

    No public exploit code indexed in Metasploit or Exploit-DB

  4. Exploited in the wild: no evidence on record.

    Not in CISA KEV and no source reports exploitation

  5. Observed by OffSeq Mirage: no evidence on record.

    No attack traffic recorded by OffSeq Mirage sensors

A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), the Metasploit, Exploit-DB and nuclei-templates index as of 6 Nov 2026.

What to do

Upgrade to a fixed release listed under Affected software.

Affected software

ProductAffectedFixed in
LinuxLinuxAffected
  • ≥ fc274c1e997314bf47f6a62c79b5d7e554ed59c4, < d026f71df141c9b064ff32a78af5391a31ef75c2
Fixed in
  • d026f71df141c9b064ff32a78af5391a31ef75c2
LinuxLinuxAffected
  • ≥ fc274c1e997314bf47f6a62c79b5d7e554ed59c4, < b52476a83d9e12df00765359d728a875b128bef1
Fixed in
  • b52476a83d9e12df00765359d728a875b128bef1
LinuxLinuxAffected
  • ≥ fc274c1e997314bf47f6a62c79b5d7e554ed59c4, < 67e511d2989eb1c8c588b599ce2fcc6bb8e6f7ea
Fixed in
  • 67e511d2989eb1c8c588b599ce2fcc6bb8e6f7ea
LinuxLinuxAffected
  • ≥ fc274c1e997314bf47f6a62c79b5d7e554ed59c4, < 54fa390aae393eb130f307a85562e3001cc39a52
Fixed in
  • 54fa390aae393eb130f307a85562e3001cc39a52
LinuxLinuxAffected
  • ≥ fc274c1e997314bf47f6a62c79b5d7e554ed59c4, < 50eeb8e8a4f389efc91b93cff14a683e714ec194
Fixed in
  • 50eeb8e8a4f389efc91b93cff14a683e714ec194
LinuxLinuxAffected
  • ≥ fc274c1e997314bf47f6a62c79b5d7e554ed59c4, < 7a5214dae906d9f58e07bc4995e8181ee74439f4
Fixed in
  • 7a5214dae906d9f58e07bc4995e8181ee74439f4

Description

In the Linux kernel, the following vulnerability has been resolved: usb: gadget: udc: Fix use-after-free in gadget_match_driver The udc structure acts as the management structure for the gadget, but their lifecycles are decoupled. A race condition exists where usb_del_gadget() frees the udc memory (e.g., via mode-switch work) while gadget_match_driver() concurrently accesses the freed udc memory (e.g., via configfs), causing a Use-After-Free (UAF) that triggers a NULL pointer dereference when the freed memory is zeroed: [39430.908615][ T1171] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000 [39430.911397][ T1171] pc : __pi_strcmp+0x20/0x140 [39430.911441][ T1171] lr : gadget_match_driver+0x34/0x60 ... [39430.911890][ T1171] usb_gadget_register_driver_owner+0x50/0xf8 [39430.911910][ T1171] gadget_dev_desc_UDC_store+0xf4/0x140 [39430.931308][ T1171] configfs_write_iter+0xec/0x134 [39430.957058][ T1171] Workqueue: events_freezable __dwc3_set_mode [39430.957287][ T1171] dwc3_gadget_exit+0x34/0x8c [39430.957304][ T1171] __dwc3_set_mode+0xc0/0x664 Fix this by ensuring the udc structure remains allocated until the gadget is released. To achieve this, introduce a new usb_gadget_release() routine to the core. When the gadget is added, usb_add_gadget() stores the gadget's release routine in the udc structure and takes a reference to the udc. When the gadget is released, usb_gadget_release() drops the reference to the udc and then calls the gadget's release routine.

References

Community reviews

Loading reviews…