CVE-2026-31532
In the Linux kernel, the following vulnerability has been resolved: can: raw: fix ro->uniq use-after-free in raw_rcv() raw_release() unregisters raw CAN receive filters via can_rx_unregister(), but receiver deletion is deferred with call_rcu(). This leaves a window where raw_rcv() may still be running in an RCU read-side critical section after raw_release() frees ro->uniq, leading to a use-after-free of the percpu uniq storage. Move free_percpu(ro->uniq) out of raw_release() and into a raw-specific socket destructor. can_rx_unregister() takes an extra reference to the socket and only drops it from the RCU callback, so freeing uniq from sk_destruct ensures the percpu area is not released until the relevant callbacks have drained. [mkl: applied manually]
View on NVDAnalysis
The Linux kernel has a use-after-free vulnerability in its CAN (Controller Area Network) raw socket implementation. This flaw can be triggered during socket release, potentially leading to system crashes or local privilege escalation on affected systems. If your infrastructure utilizes CAN bus protocols or runs specialized industrial/embedded Linux distributions, you should apply the latest kernel updates immediately.
Severity
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HCWE-416EPSS
Affects
linux:linux_kernelTechnical description
In the Linux kernel, the following vulnerability has been resolved: can: raw: fix ro->uniq use-after-free in raw_rcv() raw_release() unregisters raw CAN receive filters via can_rx_unregister(), but receiver deletion is deferred with call_rcu(). This leaves a window where raw_rcv() may still be running in an RCU read-side critical section after raw_release() frees ro->uniq, leading to a use-after-free of the percpu uniq storage. Move free_percpu(ro->uniq) out of raw_release() and into a raw-specific socket destructor. can_rx_unregister() takes an extra reference to the socket and only drops it from the RCU callback, so freeing uniq from sk_destruct ensures the percpu area is not released until the relevant callbacks have drained. [mkl: applied manually]
References
- https://git.kernel.org/stable/c/1a0f2de81f7fbdc538fc72d7d74609b79bc83cc0
- https://git.kernel.org/stable/c/34c1741254ff972e8375faf176678a248826fe3a
- https://git.kernel.org/stable/c/572f0bf536ebc14f6e7da3d21a85cf076de8358e
- https://git.kernel.org/stable/c/5e9cfffad898bbeaafd0ea608a6d267362f050fc
- https://git.kernel.org/stable/c/7201a531b9a5ed892bfda5ded9194ef622de8ffa
- https://git.kernel.org/stable/c/a535a9217ca3f2fccedaafb2fddb4c48f27d36dc