btrfs:从列表中删除延迟引用列表后重新初始化该列表(CVE-2024-50273)
CVE编号
CVE-2024-50273
利用情况
暂无
补丁情况
N/A
披露时间
2024-11-19
漏洞描述
在Linux内核中,已经解决了以下的漏洞问题:关于btrfs文件系统的问题:在删除延迟引用列表后需要重新初始化该列表。在insert_delayed_ref()函数中,如果需要更新现有引用的操作至BTRFS_DROP_DELAYED_REF,我们会使用list_del()从它的ref头中的ref_add_list中删除该引用。然而,list_del()仅将列表的next和prev成员分别设置为LIST_POISON1和LIST_POISON2,而不会重新初始化引用的add_list成员。之后,如果我们针对该引用调用drop_delayed_ref(),这可能在合并或由于事务中止而销毁延迟引用时发生。在这种情况下,我们可能会在drop_delayed_ref()中对引用的add_list调用list_empty(),由于列表在list_del()之后并未重新初始化,因此会返回false。因此,在drop_delayed_ref()中我们再次调用list_del(),这将导致无效的列表访问,因为next和prev成员被设置为毒点(poison pointers)。如果设置了CONFIG_LIST_HARDENED和CONFIG_DEBUG_LIST,这会导致内存损坏(splat),否则会导致无效的毒点解引用。为了解决这个问题,我们应该使用list_del_init()来从列表中删除元素,这样可以在删除元素的同时对其进行初始化。
解决建议
建议您更新当前系统或软件至最新版,完成漏洞的修复。
文章评论