Description
In the Linux kernel, the following vulnerability has been resolved:

can: esd_usb: kill anchored URBs before freeing netdevs

esd_usb_disconnect() frees each CAN netdev with free_candev() inside
its per-netdev loop and only calls unlink_all_urbs(dev) afterwards.
The per-netdev private data (struct esd_usb_net_priv) is embedded in
the net_device allocation returned by alloc_candev(), so once
free_candev() has run, dev->nets[i] points to freed memory.
unlink_all_urbs() then dereferences the freed dev->nets[i] to kill the
per-netdev TX anchor (usb_kill_anchored_urbs(&priv->tx_submitted)),
clear active_tx_jobs, and reset priv->tx_contexts[].

Reorder the teardown so the anchored URBs are killed before the netdevs
are freed, matching other CAN/USB drivers in the same directory such as
ems_usb, usb_8dev and mcba_usb, which unregister, then unlink, then
free: unregister the netdevs first (which stops their TX queues), call
unlink_all_urbs(dev) once, then free the netdevs.

This issue was found by an in-house static analysis tool.
Published: 2026-08-06
Score: 7.8 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The esd_usb driver performs a use‑after‑free when a device disconnects: it frees each CAN netdev before killing the anchored USB request blocks (URBs). The freed private data is later accessed during URB unlinking, which can trigger an invalid memory reference in the kernel. Depending on the state of memory, this flaw can lead to a kernel panic (denial of service) or allow an attacker to execute arbitrary code with kernel privileges.

Affected Systems

All Linux kernel builds that include the esd_usb driver in the "can" subsystem are affected. The issue exists in every kernel version prior to the commit that reorders the teardown sequence, regardless of distribution. Systems that support CAN over USB devices that rely on esd_usb are at risk.

Risk and Exploitability

The CVSS score of 7.8 indicates a high severity flaw, while the EPSS score of < 1% suggests a very low likelihood of real‑world exploitation as of now. The vulnerability is not listed in the CISA KEV catalog. The likely attack vector involves the connection or abrupt disconnection of a malicious USB device that triggers the driver’s disconnect routine, or a software action that forces the driver to unload. The flaw requires user‑controlled USB hardware interaction, making it more relevant for servers and devices that accept external USB peripherals.

Generated by OpenCVE AI on August 8, 2026 at 18:27 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Apply a kernel update that includes the esd_usb teardown reordering fix or manually patch the kernel source with the commit that reorders esd_usb_disconnect().
  • Reboot the host after updating to ensure the driver is reloaded with the corrected behavior.
  • If a kernel upgrade is not immediately possible, unload the esd_usb module with "modprobe -r esd_usb" and prevent it from loading until a patched kernel is available.

Generated by OpenCVE AI on August 8, 2026 at 18:27 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Debian DLA Debian DLA DLA-4724-1 linux-6.12 new package
History

Sun, 23 Aug 2026 13:15:00 +0000


Sat, 08 Aug 2026 18:45:00 +0000

Type Values Removed Values Added
Weaknesses CWE-416

Sat, 08 Aug 2026 17:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-416

Sat, 08 Aug 2026 15:15:00 +0000

Type Values Removed Values Added
Metrics cvssV3_1

{'score': 7.8, 'vector': 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H'}


Thu, 06 Aug 2026 08:45:00 +0000

Type Values Removed Values Added
Weaknesses CWE-416

Thu, 06 Aug 2026 07:30:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: can: esd_usb: kill anchored URBs before freeing netdevs esd_usb_disconnect() frees each CAN netdev with free_candev() inside its per-netdev loop and only calls unlink_all_urbs(dev) afterwards. The per-netdev private data (struct esd_usb_net_priv) is embedded in the net_device allocation returned by alloc_candev(), so once free_candev() has run, dev->nets[i] points to freed memory. unlink_all_urbs() then dereferences the freed dev->nets[i] to kill the per-netdev TX anchor (usb_kill_anchored_urbs(&priv->tx_submitted)), clear active_tx_jobs, and reset priv->tx_contexts[]. Reorder the teardown so the anchored URBs are killed before the netdevs are freed, matching other CAN/USB drivers in the same directory such as ems_usb, usb_8dev and mcba_usb, which unregister, then unlink, then free: unregister the netdevs first (which stops their TX queues), call unlink_all_urbs(dev) once, then free the netdevs. This issue was found by an in-house static analysis tool.
Title can: esd_usb: kill anchored URBs before freeing netdevs
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-08-23T12:45:43.597Z

Reserved: 2026-07-19T15:36:31.798Z

Link: CVE-2026-64585

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-08-06T08:16:33.693

Modified: 2026-08-23T13:16:32.117

Link: CVE-2026-64585

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-08T18:30:03Z

Weaknesses