CVE-2026-72124 in Linux
摘要
由 VulDB • 2026-08-15
在 Linux 内核中,已修复以下漏洞:
can: isotp: 在 so->rx_lock 下序列化 TX(发送)状态转换
TX 状态机 (so->tx.state) 由三个上下文驱动:sendmsg() 获取并推进传输、RX 路径消耗流控制/回显帧,以及两个 hrtimer 对停滞的传输进行超时处理。在 sendmsg() 中使用无锁 cmpxchg() 进行获取操作,与在其他地方以 so->rx_lock 为保护调用 hrtimer_cancel() 相结合,留下了时间窗口,使得某个帧或定时器回调可能作用于已经发生变化的状态,从而损坏无关的传输。
现在,so->rx_lock 覆盖 TX 获取操作的完整生命周期:sendmsg() 获取该锁以检查 so->tx.state 是否为 ISOTP_IDLE,将其切换为 ISOTP_SENDING,增加 so->tx_gen 并耗尽前一个传输的定时器——所有这些操作都在同一个临界区内完成。isotp_rcv_fc()/isotp_rcv_cf() 已通过 isotp_rcv() 在该锁下运行,而 isotp_rcv_echo() 现在也自行获取该锁,因此它们永远不会观察到处于“正在获取”状态的传输。这也意味着,当另一个线程并发地获取或完成传输时,传输不再会被交给 sendmsg() 的清理路径(信号发送错误或发送错误),因此这些路径可以无条件地取消定时器并重置状态。
isotp_release() 以相同的方式获取套接字,因此竞态条件下的 sendmsg() 会看到一致的 ISOTP_SHUTDOWN 状态,从而跳过设置其定时器或发送操作。
只有 hrtimer 回调保持在 so->rx_lock 之外,因为它们在其他地方是在 so->rx_lock 的取消保护下运行的,如果它们自己也获取该锁会导致死锁。so->tx_gen 使它们能够识别超时的传输是否仍然是当前活动的传输,因此它们不会针对已经完成或被取代的传输报告错误。
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.