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: n/a
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The esd_usb driver contained a use‑after‑free bug: after a device is disconnected, the driver frees the CAN netdev structures before killing the anchored USB request blocks (URBs). The freed private data is later accessed when unlinking the URBs, which can lead to a null or stray memory reference inside the kernel. Depending on the memory state, this flaw can be exploited to execute arbitrary code with kernel privileges or to trigger a kernel panic that causes a denial of service.

Affected Systems

All Linux kernel installations that include the esd_usb driver in the “can” subsystem are affected. The vulnerability exists in every kernel build prior to the fix that reorders the teardown, regardless of the specific Linux distribution. Users of CAN over USB devices that rely on the esd_usb driver are impacted.

Risk and Exploitability

The CVSS score is not provided, and no EPSS value is available, but the flaw is a classic CWE‑416 use‑after‑free that introduces a kernel‑level attack surface. It is not listed in the CISA KEV catalog. The likely attack vector is the connection or disconnection of a malicious USB device that triggers the driver’s disconnect routine, or a software attack that forces the driver to unload. Because the flaw requires interacting with the USB subsystem, the risk is high for systems that accept user‑controlled USB devices.

Generated by OpenCVE AI on August 6, 2026 at 08:25 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Apply the kernel update that contains the fix for the esd_usb teardown reordering or manually apply the patch from the kernel commit that reorders the shutdown sequence in esd_usb_disconnect().
  • Reboot the host after applying the update to guarantee the driver is reloaded with the corrected behavior.
  • If an immediate kernel upgrade is not possible, unload the esd_usb module with "modprobe -r esd_usb" and disable the loading of that module until a patched kernel is available.

Generated by OpenCVE AI on August 6, 2026 at 08:25 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

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-06T07:06:26.556Z

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

Link: CVE-2026-64585

cve-icon Vulnrichment

No data.

cve-icon NVD

No data.

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-06T09:00:10Z

Weaknesses