CVE-2026-23375Linux内核中的透明大页(THP)机制存在逻辑缺陷,错误地允许对匿名inode(如guest_memfd和secretmem)上的文件启用THP折叠。由于这些文件通过alloc_file_pseudo()创建且未调用get_write_access(),系统将其误识别为只读常规文件。当CONFIG_READ_ONLY_THP_FOR_FS启用时,内核尝试对这些不支持的内存区域进行大页折叠,导致guest_memfd触发警告或secretmem因访问已移除的直接映射而引发内核崩溃,从而造成本地拒绝服务。
该漏洞源于file_thp_enabled()函数的判断逻辑不足。该函数检查S_ISREG(inode->i_mode)和inode_is_open_for_write(),由于匿名inode的i_writecount始终为0(未通过VFS open路径增加),它们被误判为符合条件的只读文件。在启用CONFIG_READ_ONLY_THP_FOR_FS的系统中,khugepaged或MADV_COLLAPSE会尝试对这些文件执行collapse_file()操作。对于secretmem,其页面已从直接映射移除,collapse_file()尝试通过memcpy访问直接映射地址时会导致页错误崩溃(BUG: unable to handle page fault)。对于guest_memfd,其fault handler不支持大页,会触发WARN_ON_ONCE断言。补丁通过增加IS_ANON_FILE(inode)检查来彻底排除匿名inode的THP资格。