CVE-2026-72119 patches the CAN bcm subsystem's transmit path, and the three issues being fixed are not independent bugs — they are symptoms of one unhealed structural wound. The primary vulnerability is a TOCTOU race in bcm_tx_setup() where frame validation and data copying occurred in two unlocked steps, allowing interrupt-driven paths like bcm_can_tx() and bcm_tx_timeout_handler() to observe partially constructed frame state. The fix stages data in a private buffer, validates it, then copies under lock — mirroring the approach already applied to the receive path (bcm_rx_setup()) as part of CVE-2016-4471, a decade ago. That historical parallel is itself the story: the same structural failure existed in tx for ten years after the rx path was hardened, a textbook analogous-function blind spot where a CVE fix was treated as local remediation rather than a subsystem-wide concurrency principle.

The missing memcpy_from_msg() error path is more immediately dangerous. If copying from userspace fails after partial frame allocation, op->frames points to an incomplete or uninitialized structure that subsequent TX operations will consume without re-validation. This is a use-after-uninitialized-write that can become an arbitrary-data-injection primitive depending on heap state.

On 32-bit systems, a subtler torn-read vulnerability affects timer arithmetic. Reading a 64-bit ktime_t value in two non-atomic 32-bit chunks allows bcm_tx_timeout_handler() to observe a value that never existed at any single point in time, corrupting timeout calculations intermittently.

What defenders should do: first, verify your kernel version is patched. Second, audit any out-of-tree CAN drivers or vendor BSP kernels — embedded deployments frequently run forked kernels that cherry-pick patches, and this fix may not reach automotive ECUs and industrial controllers that ship with long-support vendor kernels. Third, examine whether bcm_tx_lock acquisition in your interrupt handlers can sleep or block; if the fix trades the torn-read for priority inversion (lock holder in interrupt context blocked by interrupted context), you have a new DoS surface. Finally, model the exploit chain: on systems where unprivileged CAN traffic is possible (common in automotive ECUs), the unhandled memcpy_from_msg() failure path could allow data injection into CAN frames without triggering the validation checks, bypassing network-layer hardening on the ethernet side.