CVE-2026-23357Linux内核中的mcp251x CAN驱动程序存在安全漏洞。在mcp251x_open函数的错误处理路径中,代码在持有互斥锁的情况下调用free_irq释放中断。若此时中断已触发,处理程序将等待该锁,导致free_irq与中断处理程序互相等待,引发死锁,进而影响系统可用性。
该漏洞源于Linux内核drivers/net/can/spi/mcp251x.c文件中的锁机制设计缺陷。在mcp251x_open函数执行过程中,如果发生错误,代码会进入错误处理路径。此时,mpc_lock互斥锁处于锁定状态。随后调用的free_irq()函数试图注销中断处理程序,但必须等待当前正在运行的中断处理程序结束。然而,如果在调用free_irq之前中断已经发生,中断处理程序(mcp251x_irq)在执行时会尝试获取mpc_lock。这就形成了典型的ABBA死锁:主线程持有锁并等待中断结束,中断处理程序等待锁被释放。结果是内核线程挂起,导致拒绝服务。