CVE-2026-43285Linux内核mm/slab模块存在安全漏洞。当`get_from_any_partial()`在NMI上下文中被调用时,会访问`current->mems_allowed_seq`。由于该变量使用非NMI安全的自旋锁保护,这违反了seqlock的使用规范,导致Lockdep警告并可能引发死锁,进而造成系统拒绝服务。
该漏洞源于Linux内核在NMI(不可屏蔽中断)上下文中对内存分配策略的处理不当。`get_from_any_partial()`函数在处理内存分配时会读取`current->mems_allowed_seq`以检查内存节点允许策略。然而,该序列计数器基于`seqcount_spinlock_t`实现,其写入操作依赖自旋锁进行串行化。在NMI上下文中,如果中断发生时CPU正持有该自旋锁,NMI处理函数再次尝试读取该序列号或触发相关锁逻辑将导致死锁,因为NMI具有最高优先级且无法被调度。Lockdep检测到了这种从`INITIAL USE`到`IN-NMI`的不一致锁状态。根据内核文档,此类场景不应使用NMI不安全的seqcount。修复方案是在NMI上下文中跳过对该序列号的访问,避免重试逻辑,从而消除死锁风险。