CVE-2026-23419Linux内核net/rds组件在处理TCP连接调优时存在死锁漏洞。问题出在rds_tcp_tune函数中,当持有socket锁时调用sk_net_refcnt_upgrade()进行内存分配,触发了与fs_reclaim锁的循环依赖。本地或远程攻击者可利用该缺陷导致系统内核死锁或崩溃,造成拒绝服务。
该漏洞源于Linux内核net/rds子系统的rds_tcp_tune函数实现不当。函数在执行过程中持有socket锁(k-sk_lock-AF_INET6),同时调用了sk_net_refcnt_upgrade()。后者通过get_net_track()和ref_tracker_alloc()触发内核内存分配(__kmalloc)。内存分配可能触发fs_reclaim操作,需要获取fs_reclaim锁。由于其他代码路径可能先持有fs_reclaim锁再尝试获取socket锁,从而形成了“Socket锁 -> fs_reclaim锁”与“fs_reclaim锁 -> Socket锁”的闭环依赖。这种死锁会导致挂起的工作线程无法继续执行,最终耗尽系统资源或导致内核崩溃。修复方案是将sk_net_refcnt_upgrade()的调用移出socket锁的保护范围,因为此时并发代码路径不会访问其修改的字段。