CVE-2026-23249CVE-2026-23249是Linux内核中XFS文件系统的一个中等严重性安全漏洞,CVSS评分5.5。该漏洞位于XFS文件系统的元数据修复功能中,具体发生在重新验证两个btrees(BNOBT和CNTBT)时。漏洞的根本原因是在xrep_revalidate_allocbt()函数中,第一次调用xchk_allocbt()检查BNOBT时,由于交叉引用检查失败会将cnt_cur指针置空,但代码未检查该指针状态就直接进行第二次调用检查CNTBT,导致空指针解引用崩溃。此漏洞可被本地低权限用户利用,通过触发特定的XFS文件系统错误来使系统崩溃,造成本地拒绝服务攻击。
该漏洞发生在Linux内核XFS文件系统的btree修复代码中。当文件系统元数据损坏时,修复函数会同时重建free space btree(BNOBT和CNTBT)和inode btree。问题出现在xrep_revalidate_allocbt()函数中:该函数需要先后调用xchk_allocbt()两次来验证两个btree的正确性。第一次调用检查BNOBT时,由于sm_type被设置为XFS_SCRUB_TYPE_BNOBT,代码会执行交叉引用检查(xchk_allocbt_xref_other),在此过程中调用xfs_alloc_get_rec()获取记录时返回-EFSCORRUPTED错误,导致xchk_should_check_xref()函数将指向sc->sa.cnt_cur的指针置空。当函数返回后进行第二次调用检查CNTBT时,由于cnt_cur已被置空,在xchk_btree()中触发空指针解引用崩溃。攻击者可通过ioctl$XFS_IOC_ERROR_INJECTION注入错误,或直接触发文件系统损坏状态来利用此漏洞。相同的漏洞模式也存在于xrep_revalidate_iallocbt()函数中。修复方案是在重新验证前检查cursor是否为空,并在第一个树已损坏时跳过第二个树的验证。