CVE-2026-31609Linux内核的SMB客户端模块存在一个严重的双重释放漏洞。该漏洞发生在`smbd_free_send_io()`函数被重复调用时。具体而言,`smbd_send_batch_flush()`函数内部已经调用了`smbd_free_send_io()`来释放资源,但在后续处理中,当`smbd_post_send()`将请求移动到批处理列表后,系统错误地再次调用了`smbd_free_send_io()`。这种重复释放内存的行为会导致内核崩溃或潜在的权限提升。由于攻击者无需身份认证且可通过网络触发,该漏洞风险极高。
该漏洞源于Linux内核SMB客户端实现中的逻辑错误。在SMB Direct传输处理流程中,`smbd_send_batch_flush()`函数负责刷新批处理请求并释放IO内存,它会调用`smbd_free_send_io()`。然而,在代码执行路径中,当`smbd_post_send()`函数将发送请求移动到批处理列表后,调用方并未意识到资源已经被释放,从而再次调用`smbd_free_send_io()`。这种“Double Free”情况破坏了内核堆管理器的元数据。攻击者可以通过构造特制的SMB数据包发送给目标主机,触发该代码路径。由于无需用户交互和认证,远程攻击者可利用此漏洞导致系统崩溃(拒绝服务),在特定条件下,精心布局的堆喷射可能结合此双重释放漏洞实现内核态代码执行,从而完全控制受害主机。