{"id":41010,"date":"2026-10-19T00:31:49","date_gmt":"2026-10-18T16:31:49","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98538"},"modified":"2026-10-19T00:31:49","modified_gmt":"2026-10-18T16:31:49","slug":"cve-2026-98538","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98538","title":{"rendered":"CVE-2026-98538 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nwriteback: bound clea"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>writeback: bound cleanup_offline_cgwb() rescans by rotating scanned inodes<\/p>\n<p>cleanup_offline_cgwb() prepares at most WB_MAX_INODES_PER_ISW inodes<br \/>\nper call and is called again until the dying wb is drained, but every<br \/>\ncall walks wb-&gt;b_attached and then wb-&gt;b_dirty_time from the same end.<br \/>\nInodes already prepared (they stay on the list with I_WB_SWITCH set<br \/>\nuntil the switch worker runs) and inodes that cannot be switched<br \/>\n(I_FREEING, I_WILL_FREE, !SB_ACTIVE, DAX, already on the target wb)<br \/>\nstay where they are, so each pass rescans a growing run of them under<br \/>\nwb-&gt;list_lock and a full drain is quadratic in the number of inodes on<br \/>\nthe list. With ~17M inodes attached to one dying cgwb we saw this end<br \/>\nin soft lockups, with CPUs reported stuck for 21-48s.<\/p>\n<p>Walk both lists from the oldest end and move every scanned inode to<br \/>\nthe newest end, so the next pass starts where the previous one stopped<br \/>\nand the drain becomes linear. b_attached is unordered, so nobody sees<br \/>\nthe reorder there. b_dirty_time is ordered by dirtied_when, but the<br \/>\noldest unscanned inode stays at the end move_expired_inodes() picks<br \/>\nfrom, sync takes the whole list regardless of order, and prepared<br \/>\ninodes leave the list as soon as the switch work runs and get a new<br \/>\ndirtied_time_when on the new wb anyway, so the only inodes left out of<br \/>\norder are the ones that can never switch (DAX), and only on the dying<br \/>\nwb.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>writeback: bound cleanup_offline_cgwb() rescans by rotating scanned inodes<\/p>\n<p>cleanup_offline_cgwb() prepares at most WB_MAX_INODES_P<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-41010","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/41010","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=41010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=41010"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=41010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}