CVE-2026-31704Linux内核中的ksmbd模块存在安全漏洞。在处理DACL(自主访问控制列表)时,相关函数使用u16类型变量累加ACE大小。当文件包含大量POSIX ACL条目时,累加值可能超过65535导致溢出回绕。这会导致指针算术错误,覆盖已写入的内存区域,造成可用性影响。
该漏洞源于Linux内核ksmbd模块的smbacl.c文件。函数`set_posix_acl_entries_dacl()`和`set_ntacl_dacl()`在构建DACL时,使用`u16`类型的变量累加访问控制项(ACE)的大小。由于`u16`最大值为65535,当单个文件的POSIX ACL条目数量非常多时,累加的总大小会超过该限制,触发整数溢出并回绕。溢出后,指针运算`(char *)pndace + *size`会指向缓冲区中已写入数据的位置(而非预期的新位置)。后续的写入操作将覆盖之前的ACE条目,导致内存损坏。最终,`pndacl->size`被设置为错误的截断值。这可能导致系统崩溃或拒绝服务。