从这个网页截图中,我们可以获取到以下关于漏洞的关键信息: 1. 漏洞描述: - 一个客户报告了一个crash和ocfs2文件系统的损坏。 - 这个crash是由于检测到损坏引起的。 - 通过调试,发现fsck -fn输出显示了以下错误: 2. 问题原因: - 在reflink工作流程中,ocfs2_reflink_xattr_inline()函数在为inline xattr保留空间时出现问题。 - 这个函数在reflink树已经重建在目标inode时调用,但没有检查是否有空间在根元数据块中。 - 函数简单地将l_count从243减到227,从而为256字节的inline xattr分配空间,而inode已经扩展到超过这个索引(在这种情况下高达230),导致损坏。 3. 修复措施: - 修复措施是在reflink树重建之前为目标inode保留空间。 - 客户已经验证了这个修复。 4. 相关链接: - lkml.kernel.org - ef962df057aa - ocfs2: xattr: fix inlined xattr reflink 5. 代码更改: - 代码更改包括在ocfs2/refcounttree.c和ocfs2/xattr.c文件中。 - 更改了ocfs2_reflink_xattr_inline()函数,以正确调整extent记录计数以保留空间。 这些信息表明,这个漏洞是由于在reflink树重建时未正确检查是否有空间在根元数据块中,导致为inline xattr分配过多空间,从而导致损坏。修复措施是确保在reflink树重建之前为目标inode保留足够的空间。