CVE-2026-74672 in Linux情報

要約

〜によって VulDB • 2026年08月23日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

mm/vmalloc: ptdumpにおけるUse-After-Free(UAF)を回避するために、巨大なvmapに対してinit_mmロックを取得する

パッチシリーズ「mm: fix UAF caused by race between ptdump and vmap pgtable freeing」バージョン6。

カーネルのページテーブルウォーカーは、大きく2つのカテゴリに分類されます。1つはwalk_kernel_page_table_range_lockless()を通じて排他制御が不要な範囲を扱うもの、もう1つはwalk_kernel_page_table_range()またはwalk_page_range_debug()を通じて排他制御が必要な範囲を扱うものです。

前者のカテゴリは、arm64アーキテクチャのコードによってのみ使用され、これは完全に所有し、かつ並行して書き込まない範囲に対して動作します。

後者のカテゴリには、完全に所有しているが(ただし並行するライターとの排他が必要である)範囲を対象とするカーネルページテーブルウォーカーが含まれます。

排他制御に使用されるロックはmmapロックであり、カーネルの範囲の場合、これはinit_mmに対するmmapロックです。

ptdumpは特殊なケースであり、walk_page_range_debug()の唯一の利用者であり、かつ所有していない範囲を歩く唯一のケースです。

これにより問題が生じます。ページテーブルがptdumpの実行中に解放される可能性があるためです。実際、この結果としてカーネル内でUse-After-Free(UAF)バグが発生しており、本シリーズによってこれが修正されます。

vmapは可能であればページテーブルを巨大なリーフエントリに昇格させ、その際に下部のページテーブルを解放します。しかし、これは並行するptdumpウォークに対して意味のあるロックなしで行われます。

その結果、現在Use-After-Freeが発生する可能性があります。本シリーズはこの問題を解決するために、vmapの巨大化ロジックが巨大なページテーブルエントリを設定し、かつ以前のリーフページテーブルを解放する際にmmap読み取りロックを取得するようにします。

ptdumpコードはすでにmmap書き込みロックを取得しているため、これによりptdumpウォーカーが観察するのは常に巨大なページテーブルエントリか既存のページテーブルエントリのいずれかのみとなり、その下で何かが解放されることはありません。

この問題に対する緩和策は、fa93b45fd397(「arm64: Enable vmalloc-huge with ptdump」)コミットにおいてすでにarm64に対して適用されており、本シリーズではこれを慎重に扱う必要があります。

この緩和策は、ptdumpが進行中である場合にvmapページテーブルの解放時にinit_mmに対するmmap読み取りロックを取得することで問題を解決します。

しかし、もしarm64向けに変更を単純に適用し、かつその変更を取り消さずに本シリーズのパッチを適用すると、デッドロックが発生する可能性があります。

これは、vmapがptdumpによる書き込みロックの取得試行の前に読み取りロックを取得する場合があり、それがキューに入れられるためです。rwsemの starvation(飢餓)ルールにより、arm64コード内の(未確認の)ネストされたmmap読み取りロックもブロックされ、結果として元の読み取りロックが解放されることなくデッドロックに至ります。

本シリーズは、vmapロジックにおけるmmap読み取りロックを#ifndef CONFIG_ARM64で囲むことでこの問題を回避し、その後fa93b45fd397(「arm64: Enable vmalloc-huge with ptdump」)コミットの一部を取り消します。これにより巨大なvmapサポートの有効化は維持され、部分取り消しパッチによるifdefferyが削除されます。

本シリーズでは以下の関連する問題も同時に修正されています:

* x86のページ属性ロジック(特にChange Page Attributes: CPA)には、巨大な範囲を巨大リーフエントリに結合できる機能があります。これはptdumpウォークと並行して実行されると同様にUAFを引き起こす可能性があるため、これを回避するためにinit_mm mmapロックを取得します。

* CPAロジックは並行したページテーブル操作とCPA結合を許可しており、前者が後者によって解放されるページテーブルにアクセスするリスクがあります。これを修正するため、全体のCPA結合操作中にはinit_mmに対するmmap書き込みロックを、ページテーブル操作中には読み取りロックを取得します。

* x86およびarm64は非カーネルmmのウォーク(efi mmウォークの許可、およびx86の場合任意のmm)を許可するため、kernel mappingsが安定した状態を保つよう、ウォーク対象のmmだけでなくinit_mmもロックします。

パッチの順序は、厳密な依存関係(特にarm64の部分取り消しはvmap変更の後に行う必要がある)と論理的な依存関係(非カーネルmmの修正はvmap/CPAの修正が適用されて初めて意味を成すため)に基づいて確立されています。

このパッチ(3件中1件目):

現在、深刻なra ---省略---

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

責任者

Linux

予約する

2026年08月15日

モデレーション

承諾済み

エントリ

VDB-394447

EPSS

0.00000

アクティビティ

非常低い

ソース

Interested in the pricing of exploits?

See the underground prices here!