← All Advisories

Linux Kernel CAN ISO-TP TX State Machine Mixes a Lock-Free Claim in sendmsg with Locked Timer Cancellation, Corrupting Concurrent Transfers

Last refreshed2026-09-29

Status: NEW  |  Advisory ID: CVE-2026-72124

Key Details

CVECVE-2026-72124
CVSS Score / Version8.8 (High) / CVSS v3.1
Updated2026-08-19
CVSS VectorCVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS Proseattack vector is adjacent; attack complexity is low; privileges required is none; user interaction is none; scope is unchanged; confidentiality impact is high; integrity impact is high; availability impact is high.

What to Know

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

can: isotp: serialize TX state transitions under so->rx_lock

The TX state machine (so->tx.state) is driven from three contexts:

sendmsg() claiming and progressing a transfer, the RX path consuming

Flow Control/echo frames, and two hrtimers timing out a stalled

transfer. Mixing a lock-free cmpxchg() claim in sendmsg() with

hrtimer_cancel() calls made under so->rx_lock elsewhere left windows

where a frame or timer callback could act on a state that had already

moved on, corrupting an unrelated transfer.

so->rx_lock now covers the full lifecycle of a TX claim: sendmsg()

takes it to check so->tx.state is ISOTP_IDLE, switch it to

ISOTP_SENDING, bump so->tx_gen and drain the previous transfer's

timers - all as one critical section. isotp_rcv_fc()/isotp_rcv_cf()

already run under this lock via isotp_rcv(), and isotp_rcv_echo() now

takes it itself, so none of them can ever observe a transfer mid-claim.

This also means a transfer can no longer be handed to sendmsg()'s

cleanup paths (signal or send error) while another thread is

concurrently claiming or finishing it, so those paths can cancel

timers and reset the state unconditionally.

isotp_release() claims the socket the same way, so a racing sendmsg()

sees a consistent ISOTP_SHUTDOWN and skips arming its timer or sending.

Only the hrtimer callbacks stay outside so->rx_lock, since they run

under so->rx_lock's cancellation elsewhere and taking it themselves

would deadlock. so->tx_gen lets them recognize whether the transfer

they timed out is still the one currently active, so they don't

report an error against a transfer that has since completed or been

superseded. (NVD)

References

SourceReference
NVDhttps://nvd.nist.gov/vuln/detail/CVE-2026-72124
CVEhttps://www.cve.org/CVERecord?id=CVE-2026-72124