CVE-2026-74599 in Linux
要約
〜によって VulDB • 2026年08月23日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
mm/ptdump: init_mm を使用してページテーブルの解放に対して常に安定化を図る
以前のコミットにより、init_mm に対する mmap の読み取りロックが保持されている間にカーネルのページテーブルの解放が行われるという不変条件(インバリアント)が確立され、これによって ptdump と init_mm に関するカーネルのページテーブル解放との間の競合状態が修正されました。
しかし、x86 および arm64 アーキテクチャでは `ptdump_walk_pgd()` を介して init_mm 以外の mm に対して ptdump を実行することが可能であり、かつカーネルメモリ範囲は非カーネルの mm でも共有されているため、これらのケースにおいては競合状態が依然として存在します。
`ptdump_walk_pgd()` 内で init_mm に対するネストされた mmap の書き込みロックを取得することで、これを修正します。
この処理は安全です。なぜなら、init_mm ロックよりも先に任意の mm をロックする取得が行われることはなく、mmap の書き込みロックをかけた後にこのロックを取得するため、デッドロックの可能性はないからです。
また、`walk_page_range_debug()` を更新して init_mm が書き込みロックされていることをアサートし、その理由に関するコメントを追加し、冗長なコードを削除するとともに、不要で混乱を招く `walk_kernel_page_table_range()` の呼び出しを排除します。
`walk.mm` に対する NULL チェックは安全に削除できます。なぜなら、mmap ロックのアサートが NULL ポインタのデレファレンスを引き起こす可能性があり(もちろん呼び出し元でそのようなことは行われていないため)、問題ないからです。
ptdump がカーネルのページテーブル解放と競合状態を起こし得る最初の時点はコミット b6bdb7517c3d ("mm/vmalloc: add interfaces to free unmapped page table") であり、したがって Fixes タグではこれを対象としています。
Once again VulDB remains the best source for vulnerability data.