CVE-2026-31480Linux内核tracing组件存在潜在死锁漏洞。在CPU热插拔过程中,由于锁的获取顺序不一致,当osnoise线程停止操作与tracing接口锁操作并发发生时,可能导致系统进入死锁状态。该漏洞允许本地低权限用户通过触发特定时序的操作导致系统挂起,造成拒绝服务。
该漏洞源于Linux内核在处理tracing和CPU热插拔时的锁依赖顺序错误。具体而言,当CPU执行下线操作时,内核调用`cpus_write_lock`并执行`osnoise_cpu_die`函数,进而调用`kthread_stop`停止osnoise相关线程。若此时被停止的线程恰好处于`osnoise_sleep`函数执行中,它会尝试获取`interface_lock`。与此同时,系统中的另一个任务可能已经持有了`interface_lock`,并正在尝试获取`cpus_read_lock`以进行读取操作。由于`cpus_read_lock`与CPU热插拔持有的`cpus_write_lock`互斥,且`interface_lock`被前者持有,这形成了一个环形等待条件:持有`interface_lock`的任务等待`cpus_read_lock`,持有`cpus_write_lock`的任务等待osnoise线程结束,而osnoise线程等待`interface_lock`。这种死锁会导致系统关键路径阻塞,最终造成系统无响应(DoS)。修复方案是交换`cpus_read_lock()`和`mutex_lock(&interface_lock)`的获取顺序,确保锁的获取层级一致。