{"id":33294,"date":"2026-10-06T20:31:42","date_gmt":"2026-10-06T12:31:42","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98225"},"modified":"2026-10-06T20:31:42","modified_gmt":"2026-10-06T12:31:42","slug":"cve-2026-98225","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98225","title":{"rendered":"CVE-2026-98225 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nmm\/shrinker: fix bogu"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>mm\/shrinker: fix bogus set_shrinker_bit() with cgroup.memory=nokmem<\/p>\n<p>With cgroup.memory=nokmem, shrinker_memcg_alloc() bails out early and<br \/>\nnever allocates an id, so shrinker-&gt;id keeps the 0 it got from the<br \/>\nkzalloc() in shrinker_alloc().  __list_lru_init() then copies that 0 into<br \/>\nlru-&gt;shrinker_id, where it looks like a valid bit index.<\/p>\n<p>Nothing calls expand_shrinker_info() on nokmem either, so shrinker_nr_max<br \/>\nstays 0 and every memcg ends up with an empty map (map_nr_max == 0).<\/p>\n<p>deferred_split_folio() hands a real memcg to __list_lru_add() regardless<br \/>\nof whether the lru is memcg aware, so the first THP queued in a cgroup<br \/>\ndoes set_shrinker_bit(memcg, nid, 0) and trips the bounds check:<\/p>\n<p>WARNING: mm\/shrinker.c:212 at set_shrinker_bit+0x7d\/0x90, CPU#126<br \/>\nCall Trace:<\/p>\n<p> deferred_split_folio+0x18c\/0x220<br \/>\n map_anon_folio_pmd_nopf+0xdd\/0x130<br \/>\n map_anon_folio_pmd_pf+0x14\/0xb0<br \/>\n do_huge_pmd_anonymous_page+0x1a1\/0x620<br \/>\n __handle_mm_fault+0xea9\/0x10d0<br \/>\n handle_mm_fault+0xe5\/0x320<br \/>\n do_user_addr_fault+0x1cc\/0x870<br \/>\n exc_page_fault+0x81\/0x1b0<br \/>\n asm_exc_page_fault+0x27\/0x30<\/p>\n<p>Harmless, the WARN_ON_ONCE() is what keeps the out of bounds unit[] read<br \/>\nfrom happening, but the id should not look valid in the first place.<br \/>\nClear it before returning.<\/p>\n<p>Two other spots could paper over this: drop the id in __list_lru_init()<br \/>\nwhen nokmem turns memcg_aware off, or make deferred_split_folio() pass<br \/>\nNULL like list_lru_add_obj() does.  Both leave shrinker-&gt;id lying around<br \/>\nfor the next caller, so fix it where the id is handed out.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>mm\/shrinker: fix bogus set_shrinker_bit() with cgroup.memory=nokmem<\/p>\n<p>With cgroup.memory=nokmem, shrinker_memcg_alloc() bails out ea<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-33294","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/33294","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=33294"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=33294"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=33294"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}