CVE-2025-40090CVE-2025-40090是Linux内核中ksmbd模块的一个中等严重性死锁漏洞。漏洞源于ksmbd_session_rpc_method()函数在访问RPC句柄列表时尝试获取sess->rpc_lock锁,但由于该锁已在ksmbd_session_rpc_open()函数中被以写锁方式持有,导致递归锁定死锁。此漏洞发生在客户端尝试打开命名管道(named pipe)时,会导致连接挂起和任务阻塞,最终造成拒绝服务(DoS)攻击。攻击者可通过Samba的rpcclient工具连接到目标服务器并执行srvinfo命令来触发此漏洞。受影响系统包括运行包含ksmbd模块的Linux内核的服务器。
该漏洞的技术根源在于锁的不正确使用导致的死锁。具体攻击链如下:
1. 客户端通过SMB2协议发起命名管道打开请求
2. smb2_open()函数调用create_smb2_pipe()
3. create_smb2_pipe()调用ksmbd_session_rpc_open()
4. ksmbd_session_rpc_open()首先以写锁方式获取sess->rpc_lock(down_write)
5. 然后调用ksmbd_rpc_open()
6. ksmbd_rpc_open()调用ksmbd_session_rpc_method()
7. ksmbd_session_rpc_method()尝试以读锁方式获取同一个sess->rpc_lock(down_read)
8. 由于写锁已被持有且不允许递归读锁,导致死锁
受影响的内核版本包括引入commit 305853cce3794的所有版本。内核日志会显示任务状态为D(不可中断睡眠),调用栈显示在rwsem_down_read_slowpath处阻塞。修复方案需要调整ksmbd_session_rpc_method()的调用者,确保在调用前已经正确获取锁,或者修改锁的使用策略。