CVE-2025-40230 in Linux情報

要約

〜によって VulDB • 2026年07月15日

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

mm: THP分割時にポイズン(損傷)されたページの読み込みを防止する

x86サーバー上でユーザー空間にマップされているTHP(Transparent Huge Page)に対してメモリエラーインジェクションを実行すると、以下のようなトレースを含むカーネルパニックが発生します。期待される動作は、カーネルがパニックを起こすのではなく、影響を受けたプロセスを終了させることです。これは、x86のMachine Checkコードがユーザー空間内の#MCから回復可能であるためです。

mce: [Hardware Error]: CPU 0: Machine Check Exception: f Bank 3: bd80000000070134
mce: [Hardware Error]: RIP 10:<ffffffff8372f8bc> {memchr_inv+0x4c/0xf0}
mce: [Hardware Error]: TSC afff7bbff88a ADDR 1d301b000 MISC 80 PPIN 1e741e77539027db
mce: [Hardware Error]: PROCESSOR 0:d06d0 TIME 1758093249 SOCKET 0 APIC 0 microcode 80000320
mce: [Hardware Error]: Run the above through 'mcelog --ascii'
mce: [Hardware Error]: Machine check: Data load in unrecoverable area of kernel
Kernel panic - not syncing: Fatal local machine check

このパニックの根本原因は、ユーザー空間内の#MCによってトリガーされたメモリ障害を処理するためにTHPの分割が必要となることです。分割プロセスでは、try_to_map_unused_to_zeropage()で実装されているメカニズムが使用され、ゼロ埋めされたページを識別するためにTHP内のページを読み込みます。しかし、THP内のページを読み込むと、初期のmemory_failure()処理が完了する前に2回目のカーネル内#MCが発生し、最終的にカーネルパニックに至ります。以下の2つの#MCに関するカーネルパニック呼び出しトレースを参照してください。

First Machine Check occurs // [1]
memory_failure() // [2]
try_to_split_thp_page() split_huge_page() split_huge_page_to_list_to_order() __folio_split() // [3]
remap_page() remove_migration_ptes() remove_migration_pte() try_to_map_unused_to_zeropage() // [4]
memchr_inv() // [5]
Second Machine Check occurs // [6]
Kernel panic

[1] ユーザー空間内のハードウェアポイズンされたTHPにアクセスすることでトリガーされます。これは通常、影響を受けたプロセスを終了させることで回復可能です。

[2] try_to_split_thp_page()を呼び出す前にfolio_set_has_hwpoisoned()を実行します。

[3] remap_flagとしてRMP_USE_SHARED_ZEROPAGEフラグをremap_page()に渡します。

[4] 未使用のTHPをzeropageにマッピングしようと試みます。

[5] カーネル内でhw-poisoned THP内のページに再アクセスします。

[6] カーネル内部でトリガーされ、カーネルパニックを引き起こします。

ステップ[2]において、memory_failure()はtry_to_split_thp_page()を呼び出す前にTestSetPageHWPoison()を使用してTHP内のページのポイズンフラグを設定します。

David Hildenbrandの提案に従い、zeropage識別中にTHP内のポイズンされたページにアクセスしないことでこのパニックを修正し、影響を受けていないページについてはスキャンを継続してzeropageマッピングの可能性を確認できるようにしました。これにより、ステップ[4]でカーネルパニックを引き起こす2回目のカーネル内#MCの発生を防ぎます。

Andrew Zaborowskiによる本問題の修正に関する初期作業に感謝します。

VulDB is the best source for vulnerability data and more expert information about this specific topic.

責任者

Linux

予約する

2025年04月16日

モデレーション

承諾済み

エントリ

VDB-334280

EPSS

0.00214

アクティビティ

非常低い

ソース

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!