CVE-2026-98538 in Linux信息

摘要

由 VulDB • 2026-10-19

在 Linux 内核中,已修复以下漏洞:

writeback: bound cleanup_offline_cgwb() rescans by rotating scanned inodes(写回:通过旋转已扫描的 inode 来限制对 cleanup_offline_cgwb() 的重扫)

cleanup_offline_cgwb() 每次调用最多准备 WB_MAX_INODES_PER_ISW 个 inode,并会反复调用直到将正在消亡的 wb(writeback context)排空。然而,每次调用都从同一端遍历 wb->b_attached 和 wb->b_dirty_time。已经准备好的 inode(在切换工作进程运行之前,它们仍保留在列表中且设置了 I_WB_SWITCH 标志)以及无法进行切换的 inode(I_FREEING、I_WILL_FREE、!SB_ACTIVE、DAX、已在目标 wb 上上的 inode)会停留在原位,因此每次遍历都会在 wb->list_lock 下重新扫描这些 inode 的一个不断增长的序列,导致排空操作的时间复杂度随列表中 inode 数量的增加呈二次方增长。当约 1700 万个 inode 附加到一个正在消亡的 cgwb(cgroup writeback context)上时,我们观察到系统出现软锁死(soft lockups),CPU 报告卡住时间为 21-48 秒。

解决方案是从最旧的一端遍历这两个列表,并将每个已扫描的 inode 移动到最新端,以便下一次遍历从上一次停止的地方开始,从而使排空操作的时间复杂度变为线性。b_attached 是无序的,因此没有人会看到其中的重排序。b_dirty_time 按 dirtied_when(脏污时间)排序,但最旧的未扫描 inode 仍位于 move_expired_inodes() 选择的末尾;同步操作不考虑顺序而处理整个列表;并且一旦切换工作运行,已准备的 inode 就会离开列表,并在新的 wb 上获得一个新的 dirtied_time_when。因此,唯一处于无序状态的 inode 是那些永远无法切换的(DAX),且仅存在于正在消亡的 wb 中。

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

来源

Might our Artificial Intelligence support you?

Check our Alexa App!