CVE-2026-31708Linux内核SMB客户端在处理`smb2_ioctl_query_info`函数的QUERY_INFO路径响应时存在越界读取漏洞。由于未验证灵活数组载荷是否适合响应缓冲区,恶意服务器可返回过大的OutputBufferLength,导致`copy_to_user`读取越过响应缓冲区,将相邻内核堆内存暴露给用户空间,造成信息泄露。
该漏洞位于Linux内核的SMB客户端实现中,具体涉及`smb2_ioctl_query_info`函数的QUERY_INFO处理分支。当该函数处理来自服务器的响应时,它将`qi.input_buffer_length`限制为服务器报告的`OutputBufferLength`,并使用`copy_to_user`将数据复制到用户空间。然而,代码在复制前未检查`qi.input_buffer_length`是否超出实际接收到的响应缓冲区`rsp_iov[1].iov_len`的大小。攻击者若能控制恶意SMB服务器,可构造特制的响应包,声明一个大于实际数据长度的`OutputBufferLength`。这将导致内核在执行`copy_to_user`时读取响应缓冲区之外的内存区域,从而将相邻的内核堆数据泄露给用户空间进程。修复方案引入了基于`struct_size`的边界检查以防止此类读取。