{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-64585","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2026-07-19T15:36:31.798Z","datePublished":"2026-08-06T07:06:26.556Z","dateUpdated":"2026-08-23T12:45:43.597Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-08-23T12:45:43.597Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\ncan: esd_usb: kill anchored URBs before freeing netdevs\n\nesd_usb_disconnect() frees each CAN netdev with free_candev() inside\nits per-netdev loop and only calls unlink_all_urbs(dev) afterwards.\nThe per-netdev private data (struct esd_usb_net_priv) is embedded in\nthe net_device allocation returned by alloc_candev(), so once\nfree_candev() has run, dev->nets[i] points to freed memory.\nunlink_all_urbs() then dereferences the freed dev->nets[i] to kill the\nper-netdev TX anchor (usb_kill_anchored_urbs(&priv->tx_submitted)),\nclear active_tx_jobs, and reset priv->tx_contexts[].\n\nReorder the teardown so the anchored URBs are killed before the netdevs\nare freed, matching other CAN/USB drivers in the same directory such as\nems_usb, usb_8dev and mcba_usb, which unregister, then unlink, then\nfree: unregister the netdevs first (which stops their TX queues), call\nunlink_all_urbs(dev) once, then free the netdevs.\n\nThis issue was found by an in-house static analysis tool."}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","baseScore":7.8,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The UAF is reached by forcing esd_usb_disconnect() via local usbfs USBDEVFS_DISCONNECT, sysfs unbind, or USB emulation, not by network/CAN traffic; this matches AV:L scoring of analogous USB disconnect UAFs (e.g. CVE-2025-40283).\nAC:L - Once disconnect runs, free_candev() then unlink_all_urbs() deterministically uses freed esd_usb_net_priv in the same teardown path; the attacker fully controls when unbind occurs, with no attacker-uncontrollable race required.\nPR:L - A basic local account with write access to the USB device node (plugdev/uaccess or USB passthrough) can issue USBDEVFS_DISCONNECT; that path has no CAP_SYS_ADMIN check, so init-namespace root is not required.\nUI:N - The attacker issues disconnect/unbind against an already-bound esd CAN-USB interface (or their own matching VID/PID device) without any separate victim action.\nS:U - The freed netdev-private object and subsequent URB teardown run entirely within the host kernel security authority; this is not a VM, IOMMU, or sandbox boundary escape.\nC:H - Use-after-free of struct esd_usb_net_priv (embedded in the freed candev) lets a reclaimed object supply attacker-controlled pointer-rich state read through usb_kill_anchored_urbs() and related teardown, enabling kernel disclosure.\nI:H - unlink_all_urbs() writes through the freed priv (usb_kill_anchored_urbs on tx_submitted, atomic_set of active_tx_jobs, and tx_contexts[] resets), giving a heap UAF write primitive suitable for control-flow hijack.\nA:H - Dereferencing the freed per-netdev private data during disconnect reliably causes kernel oops/panic, and the attacker can repeat unbind/rebind to re-trigger the crash."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/net/can/usb/esd_usb.c"],"versions":[{"version":"96d8e90382dc336b5de401164597edfdc2e8d9f1","lessThan":"d12f6add48f2da15c8c8281961d3faad804c76cf","status":"affected","versionType":"git"},{"version":"96d8e90382dc336b5de401164597edfdc2e8d9f1","lessThan":"aa1d005927db38af783c1a4a8a00a39e0229ab2d","status":"affected","versionType":"git"},{"version":"96d8e90382dc336b5de401164597edfdc2e8d9f1","lessThan":"a02e1d8f191324583599544d54e59e6a2b74bb0e","status":"affected","versionType":"git"},{"version":"96d8e90382dc336b5de401164597edfdc2e8d9f1","lessThan":"a3314f10369df70925140f59bbe069718f65a0b9","status":"affected","versionType":"git"},{"version":"96d8e90382dc336b5de401164597edfdc2e8d9f1","lessThan":"765ba1c91823a296447528791b89a6504947fd5c","status":"affected","versionType":"git"},{"version":"96d8e90382dc336b5de401164597edfdc2e8d9f1","lessThan":"5832c55b3c824ba2fe9c36ac3c411baddcce053e","status":"affected","versionType":"git"},{"version":"96d8e90382dc336b5de401164597edfdc2e8d9f1","lessThan":"c43122fef328a70045fe7621c06de6b2b8e19264","status":"affected","versionType":"git"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/net/can/usb/esd_usb.c"],"versions":[{"version":"2.6.36","status":"affected"},{"version":"0","lessThan":"2.6.36","status":"unaffected","versionType":"semver"},{"version":"5.15.217","lessThanOrEqual":"5.15.*","status":"unaffected","versionType":"semver"},{"version":"6.1.178","lessThanOrEqual":"6.1.*","status":"unaffected","versionType":"semver"},{"version":"6.6.145","lessThanOrEqual":"6.6.*","status":"unaffected","versionType":"semver"},{"version":"6.12.97","lessThanOrEqual":"6.12.*","status":"unaffected","versionType":"semver"},{"version":"6.18.40","lessThanOrEqual":"6.18.*","status":"unaffected","versionType":"semver"},{"version":"7.1.5","lessThanOrEqual":"7.1.*","status":"unaffected","versionType":"semver"},{"version":"7.2","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.36","versionEndExcluding":"5.15.217"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.36","versionEndExcluding":"6.1.178"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.36","versionEndExcluding":"6.6.145"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.36","versionEndExcluding":"6.12.97"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.36","versionEndExcluding":"6.18.40"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.36","versionEndExcluding":"7.1.5"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"2.6.36","versionEndExcluding":"7.2"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/d12f6add48f2da15c8c8281961d3faad804c76cf"},{"url":"https://git.kernel.org/stable/c/aa1d005927db38af783c1a4a8a00a39e0229ab2d"},{"url":"https://git.kernel.org/stable/c/a02e1d8f191324583599544d54e59e6a2b74bb0e"},{"url":"https://git.kernel.org/stable/c/a3314f10369df70925140f59bbe069718f65a0b9"},{"url":"https://git.kernel.org/stable/c/765ba1c91823a296447528791b89a6504947fd5c"},{"url":"https://git.kernel.org/stable/c/5832c55b3c824ba2fe9c36ac3c411baddcce053e"},{"url":"https://git.kernel.org/stable/c/c43122fef328a70045fe7621c06de6b2b8e19264"}],"title":"can: esd_usb: kill anchored URBs before freeing netdevs","x_generator":{"engine":"bippy-1.2.0"}}}}