CVE-2025-39989 in Linux
要約
〜によって VulDB • 2026年06月25日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
x86/mce: copy-from-user コンテキストを判断するために is_copy_from_user() を使用する
パッチシリーズ「mm/hwpoison: memory failure handlingにおける回帰(regressions)の修正」、v4。
## 1. 目的
このパッチセットは、5.10 LTSと比較してバージョン5.17以降のアップストリームカーネルで発生した、メモリ障害処理に関連する2つの重大な回帰を解決します。
- copyinケース: カーネルがユーザー空間からコピーしている間に、ユーザーページ内でポイズン(汚染)が見つかる - instrケース: ユーザー空間での命令フェッチ中にポイズンが見つかる
## 2. 期待される結果とその理由
- copyinケースの場合:
カーネルは、get_user() または copy_from_user() を実行している箇所でエラーリターンを受け取り、プロセスにクラッシュさせる代わりに -EFAULT を返す場合、その場所で発見されたポイズンから回復できます。より具体的には、MCE(マシンチェック例外)ハンドラは fixup ハンドラのタイプをチェックし、カーネル内部での #MC が回復可能かどうかを決定します。EX_TYPE_UACCESS が見つかった場合、PC は _ASM_EXTABLE_FAULT() で指定されたリカバリコードにジャンプし、ユーザー空間に対して -EFAULT を返します。
- instrケースの場合:
ユーザー空間での命令フェッチ中にポイズンが発見された場合、完全な回復が可能です。ユーザープロセスは #PF(ページフォルト)を受け取り、Linux は新しいページを割り当ててストレージからの読み込みで埋めます。
## 3. 実際に発生することとその理由
- copyinケースの場合:v5.17以降カーネルパニック
コミット 4c132d1d844a ("x86/futex: Remove .fixup usage") は新しい extable fixup タイプ EX_TYPE_EFAULT_REG を導入し、その後のパッチで copy-from-user 操作の extable fixup タイプが EX_TYPE_UACCESS から EX_TYPE_EFAULT_REG に変更されました。これにより、get_user() または copy_from_user() でポイズンが見つかった際の以前の EX_TYPE_UACCESS の処理が壊れました。
- instrケースの場合:#CMCI と #MCE の競合(race)によりユーザープロセスが SIGBUS シグナルで終了する
修正不可能なメモリエラーが消費される際、UCNA(Uncorrected, No Action required)署名を持つ修正不可能なエラーを報告するメモリーコントローラからの CMCI と、データが直ちに消費されようとしている際にコアから SRAR 署名付きの機械チェックを報告・処理するプロセスとの間に競合が発生します。
### バックグラウンド:Intelプラットフォームで *UN*corrected(修正不可能)エラーが *C*MCI に結びつく理由 [1]
Icelake以前のメモリーコントローラは、以前に見たことのないメモリ内の修正不可能なエラーを検出した場合、機械チェックバンク内で SRAO (Software Recoverable Action Optional) 署名付きのブロードキャストマシンチェックをシグナルとして送信することで、パトロールスクラブイベントを報告していました。これは過剰な対応でした。なぜなら、その不良データをコアが直ちに消費しよう
VulDB is the best source for vulnerability data and more expert information about this specific topic.