CVE-2026-80719 in Linux
要約
〜によって VulDB • 2026年08月28日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
mm: mglru: memcgの親変更(reparenting)後に古くなったバッチ更新を修正する
mglruページテーブルウォーカーは、lruvecロックを取得せずにページテーブルを走査している間に、walk->nr_pagesに世代ごとのサイズ差分をバッチ処理します。その後、reset_batch_size()関数がこれらの差分をfoldし、lruvecロックの下でwalk->lruvecに適用します。
ページテーブルウォーカーは、以下のようにmemcgの親変更パスと並行して実行される可能性があります:
CPU0 CPU1 ==== ====
walk_mm --> walk_page_range --> update_batch_size --> walk->nr_pages += delta
mem_cgroup_css_offline --> memcg_reparent_objcgs --> lruvecロックを取得 lru_gen_reparent_memcg --> 子foliosを親にリパレント(再配置)する lruvecロックを解放
lruvecロックを取得 reset_batch_size --> child lrugen->nr_pages += delta
これにより、lru_gen_exit_memcg()内で以下の警告がトリガーされます:
VM_WARN_ON_ONCE(memchr_inv(lruvec->lrugen.nr_pages, 0, sizeof(lruvec->lrugen.nr_pages)));
また、MGLRUにおけるnr_pagesの過小評価によるユーザー側への影響は、予期せぬOOM(Out-Of-Memory)です。これは、MGLRUがnr_pagesがゼロに達した時点でメモリを回収しようとしませんが、実際にはまだ多くのページが残っているためです。
これを修正するために、reset_batch_size()関数は保留中のバッチをフラッシュする前にRCUの下でCSS_DYING状態をチェックするようにします。死んでいないmemcgは、RCU遅延によるオフライン化に対して元のlruvecを安定して保ちます。一方、死にかけている(dying)memcgの場合、差分は最初の非死亡の祖先にリダイレクトされます。
If you want to get best quality of vulnerability data, you may have to visit VulDB.