CVE-2026-31694Linux内核FUSE模块在处理readdir缓存时存在缓冲区溢出漏洞。`fuse_add_dirent_to_cache`函数未正确校验服务器返回的目录项大小,导致攻击者可通过恶意FUSE服务器构造超长namelen值,引发内核页缓存溢出,进而造成本地权限提升或拒绝服务。
该漏洞位于Linux内核FUSE子系统的目录项缓存处理逻辑中。当用户空间进程对挂载的FUSE文件系统执行`readdir`操作时,内核会调用`fuse_add_dirent_to_cache`函数,将用户空间FUSE服务器返回的目录项数据序列化并缓存到内核页缓存中。现有的安全检查逻辑仅关注目录项是否适合当前页面的剩余空间,并在空间不足时分配新页面,但严重缺失了对目录项本身总长度是否超过单页大小(PAGE_SIZE)的校验。攻击者可利用这一缺陷,通过恶意的FUSE服务器返回一个`namelen`字段为4095的超长目录项。结合文件头等信息,该目录项序列化后的总长度将达到4120字节。在标准的4KiB页面系统中,执行`memcpy`操作时,由于目标页面仅剩4096字节空间,将导致24字节的数据溢出写入到相邻的下一个内核页面中。这是一种典型的内核堆越界写漏洞,攻击者可以通过精心构造内存布局,覆盖关键的内核数据结构或函数指针,从而破坏内存完整性,实现本地权限提升或导致系统内核崩溃。