CVE-2026-31666Linux内核Btrfs文件系统模块中存在一个高危逻辑错误漏洞。该漏洞源于`lookup_extent_data_ref()`函数在处理B+树节点遍历时的返回值处理不当。当函数跨叶节点查找数据引用时,若下一个叶子节点的键不匹配,错误地返回成功状态而非未找到。此缺陷可能导致调用者操作错误的extent树项,进而引发extent树结构损坏,严重影响系统数据完整性和可用性。
该漏洞位于Linux内核的Btrfs子系统中,具体涉及`fs/btrfs/extent-tree.c`内的`lookup_extent_data_ref()`函数。漏洞由提交1618aa3c2e01的重构代码引入,原本用于区分错误的`err`变量和用于存储返回值的`ret`变量被合并,破坏了错误处理逻辑。在遍历Btrfs的B+树结构查找extent数据引用时,函数调用`btrfs_next_leaf()`以移动至下一个叶子节点。若该调用返回0(成功),`ret`变量会被更新为0。然而,如果新叶子节点的首个键与目标不匹配,正确的逻辑应是返回`-ENOENT`表示未找到。但由于`ret`已被覆盖,函数错误地返回了0。这导致上层调用者误以为找到了正确的extent引用,并对错误的内存结构进行读写,最终造成extent树元数据损坏,引发内核崩溃或数据持久化破坏。