CVE-2026-43185Linux内核的ksmbd模块中存在一个严重的符号性漏洞。在smb_direct_prepare_negotiation()函数处理SMB协商请求时,错误地将无符号整数转换为有符号整数进行比较。攻击者可以通过发送特制的preferred_send_size(如0x80000000)绕过大小检查,导致后续消息处理时发生堆缓冲区溢出,进而可能实现远程代码执行或导致系统崩溃。
该漏洞位于Linux内核的ksmbd子系统中,具体在smb_direct_prepare_negotiation()函数内。该函数使用min_t(int, ...)来比较sp->max_recv_size和req->preferred_send_size。由于req->preferred_send_size是__u32类型(无符号),当攻击者将其设置为0x80000000时,强制转换为有符号int后变为负数(-2147483648)。在min_t比较中,该负数被视为“较小”值,从而被用来设置下一个消息的最大允许接收大小。当攻击者随后发送第二条大于1420字节的消息时,数据将超出预设的缓冲区边界,导致堆缓冲区溢出。修复方案是将min_t的类型参数从int改为u32,避免符号转换问题。