CVE-2025-40149CVE-2025-40149是Linux内核中的一个高危安全漏洞,CVSS评分7.8,属于本地可利用的权限提升漏洞。该漏洞存在于Linux内核的TLS(Transport Layer Security)子系统中,具体位于get_netdev_for_sock()函数。该函数在处理setsockopt()系统调用时被调用,但此时并不处于RCU(Read-Copy-Update)锁保护机制下。攻击者可以通过精心构造的setsockopt()调用,触发sk_dst_get(sk)->dev操作,导致释放后重用(Use-After-Free)条件,进而可能实现本地权限提升或内核崩溃。
漏洞根源在于get_netdev_for_sock()函数在调用sk_dst_get(sk)->dev时,没有正确处理RCU锁上下文。Linux内核的TLS实现依赖于网络设备获取机制,而get_netdev_for_sock()负责在TLS连接建立时获取相关的网络设备接口。问题在于setsockopt()系统调用的执行路径并不在RCU临界区内,这导致在访问sk->sk_dst_cache时可能发生竞态条件。当目标内存已被释放但指针未被清空时,就会产生UAF漏洞。修复方案采用__sk_dst_get()和dst_dev_rcu()函数,这些函数专门设计用于在非RCU上下文或需要安全读取dst_entry的场景。需要注意的是,当前唯一调用->ndo_sk_get_lower_dev()的用户是bond_sk_get_lower_dev(),该函数已正确使用RCU保护。