CVE-2026-23002CVE-2026-23002是Linux内核lib/buildid模块中的一个安全漏洞。该漏洞由于在sleepable上下文中使用read_cache_folio()直接访问页缓存导致空指针解引用错误,具体表现为「BUG: unable to handle kernel NULL pointer dereference in filemap_read_folio」。攻击者可通过本地低权限访问触发此漏洞,造成内核崩溃(拒绝服务)。漏洞评分5.5,属于中等严重程度,攻击向量为本地攻击,无需用户交互即可利用。修复方案将freader改为使用__kernel_read()函数,该函数提供标准内核文件读取接口,能够处理文件数据读取的所有复杂性,包括错误处理和内存管理,从而避免空指针解引用问题的发生。
该漏洞存在于Linux内核的lib/buildid模块中,具体位于buildid代码的文件读取逻辑。在sleepable上下文中,代码使用read_cache_folio()直接访问页缓存,这种方式在某些边界情况下会导致filemap_read_folio()函数中的空指针解引用错误。漏洞利用方式为:攻击者通过本地访问,在构建buildid过程中触发特定的文件读取操作,导致内核崩溃。修复方案的核心是将freader从read_cache_folio()改为使用__kernel_read(),后者是内核标准文件读取接口,能够正确处理各种文件读取场景,包括内存分配失败、文件不存在等情况。值得注意的是,非sleepable上下文的代码保持不变,仍使用filemap_get_folio(),因为这些代码只访问已存在于内存且最新的folio,这样可以保持补丁的简单性并便于向后移植到稳定内核版本。Syzbot测试表明修复后内核不再崩溃,selftests也成功运行。