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

can: isotp: fix use-after-free race with concurrent NETDEV_UNREGISTER

isotp_release() looked up the bound network device via dev_get_by_index()
using the stored ifindex. During device unregistration the device is
unlisted from the ifindex hash before the NETDEV_UNREGISTER notifier
chain runs, so a concurrent isotp_release() could find no device, skip
can_rx_unregister() entirely, and still proceed to free the socket.
Since isotp_release() had already removed itself from the isotp
notifier list at that point, isotp_notify() would never get a chance to
clean up either, leaving a stale CAN filter that keeps pointing at the
freed socket.

Fix this the same way raw.c already does: hold a tracked reference to
the bound net_device in the socket (so->dev/so->dev_tracker) from
bind() onward instead of re-resolving it from the ifindex, and
serialize bind()/release() with rtnl_lock() so that so->dev is always
consistent with what the NETDEV_UNREGISTER notifier sees. so->dev
stays valid regardless of ifindex-hash unlisting, and is only ever
cleared by whichever of isotp_release()/isotp_notify() gets there
first, so the filter is always removed exactly once.

isotp_bind() now rejects a (re)bind with -EAGAIN while so->[tx|rx].state
isn't ISOTP_IDLE yet, so a timer left running by a prior
NETDEV_UNREGISTER can't act on a newly bound so->ifindex. Both checks
share the same lock_sock() section, so there is no window in which a
concurrent isotp_notify() clearing so->bound could be missed.
Published: 2026-08-15
Score: 7.8 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The flaw is a concurrent race in the Linux kernel’s CAN isotp socket implementation. When a network device is unregistered, the device is removed from the ifindex hash before the NETDEV_UNREGISTER notifier chain runs. If a concurrent isotp_release() occurs, it may fail to locate the device, skip CAN receive unregistration, and proceed to free the socket. Because the socket has already been removed from the isotp notifier list, a subsequent notifier chain does not clean up the stale CAN filter, leaving a dangling reference to a freed socket. This use‑after‑free can corrupt memory or leave a stale filter that misdirects CAN traffic, potentially causing unexpected behaviour or local denial of service.

Affected Systems

All Linux kernel builds that do not contain the commit adding a tracked reference to the bound net_device in the socket and serializing bind/release with rtnl_lock(). The affected component is the isotp socket implementation within the Linux kernel; the only vendor listed is Linux.

Risk and Exploitability

The EPSS score of less than 1% indicates a very low likelihood of exploitation, yet the CVSS score of 7.8 classifies the flaw as high severity. The issue is not listed in the CISA Known Exploited Vulnerabilities catalog. Because the race requires a concurrent release of an isotp socket and the unregistration of a network device, the attack vector is local and likely requires privileged or kernel context. An attacker with root or a capable application that can create isotp sockets and manage network interfaces could trigger the race to corrupt memory or disrupt CAN communication. The overall risk is high if the relevant interfaces are accessible to compromised users, but exploitation confidence remains low based on available data.

Generated by OpenCVE AI on August 18, 2026 at 02:46 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Apply the latest Linux kernel version containing the commit that adds a tracked reference to the bound net_device and serializes bind/release with rtnl_lock().
  • If an immediate kernel upgrade is not feasible, restrict or block the creation of isotp sockets for non‑privileged users by applying udev or system‑wide MAC‑ACL rules that prevent the can_isotp module from being loaded or bound to interfaces.
  • As a temporary mitigation, disable the can_isotp kernel module or administratively bring all CAN interfaces down before removing or reconfiguring network devices, then reboot to ensure no stale CAN filters remain.

Generated by OpenCVE AI on August 18, 2026 at 02:46 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Debian DLA Debian DLA DLA-4745-1 linux-6.12 security update
History

Wed, 19 Aug 2026 16:45:00 +0000


Tue, 18 Aug 2026 00:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-825
References
Metrics threat_severity

None

threat_severity

Moderate


Mon, 17 Aug 2026 18:00:00 +0000

Type Values Removed Values Added
Weaknesses CWE-362
CWE-416

Mon, 17 Aug 2026 06:00: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'}


Sat, 15 Aug 2026 20:30:00 +0000

Type Values Removed Values Added
Weaknesses CWE-362
CWE-416

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

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: can: isotp: fix use-after-free race with concurrent NETDEV_UNREGISTER isotp_release() looked up the bound network device via dev_get_by_index() using the stored ifindex. During device unregistration the device is unlisted from the ifindex hash before the NETDEV_UNREGISTER notifier chain runs, so a concurrent isotp_release() could find no device, skip can_rx_unregister() entirely, and still proceed to free the socket. Since isotp_release() had already removed itself from the isotp notifier list at that point, isotp_notify() would never get a chance to clean up either, leaving a stale CAN filter that keeps pointing at the freed socket. Fix this the same way raw.c already does: hold a tracked reference to the bound net_device in the socket (so->dev/so->dev_tracker) from bind() onward instead of re-resolving it from the ifindex, and serialize bind()/release() with rtnl_lock() so that so->dev is always consistent with what the NETDEV_UNREGISTER notifier sees. so->dev stays valid regardless of ifindex-hash unlisting, and is only ever cleared by whichever of isotp_release()/isotp_notify() gets there first, so the filter is always removed exactly once. isotp_bind() now rejects a (re)bind with -EAGAIN while so->[tx|rx].state isn't ISOTP_IDLE yet, so a timer left running by a prior NETDEV_UNREGISTER can't act on a newly bound so->ifindex. Both checks share the same lock_sock() section, so there is no window in which a concurrent isotp_notify() clearing so->bound could be missed.
Title can: isotp: fix use-after-free race with concurrent NETDEV_UNREGISTER
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-19T16:36:23.877Z

Reserved: 2026-08-09T03:40:39.907Z

Link: CVE-2026-72125

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-08-15T06:21:29.840

Modified: 2026-08-19T17:21:00.010

Link: CVE-2026-72125

cve-icon Redhat

Severity : Moderate

Publid Date: 2026-08-15T00:00:00Z

Links: CVE-2026-72125 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-08-18T03:00:09Z

Weaknesses
  • CWE-825

    Expired Pointer Dereference