CVE-2026-22980CVE-2026-22980是Linux内核nfsd子系统中的一个高危安全漏洞,CVSS评分7.8。该漏洞源于v4_end_grace写入操作与服务器关闭之间的竞态条件,可能导致内存在释放后被访问(Use-After-Free)。具体来说,写入v4_end_grace时可能与reclaim_str_hashtbl操作产生竞争,使得已释放的内存被再次访问。攻击者可通过本地低权限用户触发此漏洞,最终实现权限提升。由于nfsd4_end_grace()还被landromat工作队列调用,攻击者可能利用此路径在特定时序下触发内存破坏。该漏洞影响Linux内核的nfsd组件,攻击复杂度低,无需用户交互即可利用。
漏洞根源在于nfsd4_end_grace()函数缺乏适当的锁保护机制。写入v4_end_grace时可能与服务器关闭流程产生竞态,具体表现为:
1. 写入v4_end_grace的操作与reclaim_str_hashtbl之间存在时序竞争
2. nfsd_mutex无法在nfsd4_end_grace()调用期间持有,因为该锁在client_tracking_op->init()调用期间被持有,而该操作可能等待nfsdcltrack的upcall响应
3. v4_end_grace写入可能在线程停止后重新调度工作项
修复方案引入两个新字段到nfsd_net结构:
- client_tracking_active:仅在可安全进行客户端跟踪调用时设置
- grace_end_forced:写入v4_end_grace时设置
通过nn->client_lock保护这些标志,在持有spinlock时检查client_tracking_active标志,确保只有在该标志设置时才调度laundromat工作。该方案避免了死锁,同时确保在服务器关闭期间不会重启已停止的工作项,从而消除use-after-free条件。