CVE-2026-31406Linux内核网络协议栈中的xfrm模块存在高危漏洞。在清理网络命名空间时,xfrm_nat_keepalive_net_fini函数取消了延迟工作,但随后的xfrm_state_fini操作可能意外重新调度该工作。这导致nat_keepalive_work在net结构体被释放后仍被执行,引发释放后重用(UAF)问题,攻击者可利用此漏洞导致系统崩溃或潜在的提升权限。
该漏洞源于Linux内核xfrm子系统中网络命名空间清理时的竞态条件。具体场景涉及CPU0和CPU1的并发执行:CPU0在执行cleanup_net时,先通过xfrm_nat_keepalive_net_fini调用cancel_delayed_work_sync取消延迟工作,但在随后的xfrm_state_fini阶段,刷新状态操作会调用__xfrm_state_delete,进而触发xfrm_nat_keepalive_state_updated函数,意外地重新调度了nat_keepalive_work。与此同时,在第二轮cleanup_net中,net结构体已被释放。这导致延迟工作在net对象被释放后仍尝试访问它,造成释放后重用(UAF)。修复方案是将cancel_delayed_work_sync替换为disable_delayed_work_sync,该函数会设置工作项的标志位以防止重新调度,从而彻底解决该竞态问题。