CVE-2026-23435该漏洞存在于Linux内核的perf/x86子系统中,涉及PMU(性能监控单元)事件指针的初始化时机问题。漏洞的根本原因是在x86_pmu_enable()函数中,将cpuc->events[idx]的赋值操作移动到了PERF_HES_ARCH检查之后。这一变更导致在解限流的特定执行路径下,active_mask被置位但对应的events[]数组项仍为NULL。当PMC溢出触发NMI中断时,处理器试图访问这个空指针,从而引发内核空指针解引用错误。攻击者利用本地低权限即可触发该竞态条件,导致系统崩溃,造成拒绝服务。
漏洞的核心在于Linux内核perf子系统在Intel/AMD x86架构上的事件调度逻辑存在竞态条件。受影响的提交将事件指针的赋值逻辑从x86_pmu_start()转移到了x86_pmu_enable(),且位置不当,导致绕过了正常的初始化流程。具体攻击链如下:首先,攻击者触发一组perf事件溢出,导致内核调用perf_event_throttle_group()停止事件并设置PERF_HES_STOPPED状态。此时,active_mask被清除,但events[]数组可能保留旧值。其次,在事件仍处于限流状态时,若发生调度活动运行x86_pmu_enable(),由于事件带有PERF_HES_ARCH标志,代码会跳过对events[]数组的重新填充。随后,定时器中断触发解限流操作,直接调用x86_pmu_start()。由于该函数不再负责填充events[],它仅设置了active_mask,导致events[idx]保持为NULL。最后,当硬件PMC再次溢出触发NMI处理程序时,它遍历active_mask并尝试访问events[]中的指针,因解引用NULL指针而导致内核崩溃。