CVE-2024-39486 in Linux情報

要約

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

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

drm/drm_file: pidの参照カウントにおける競合状態を修正

filp->pidは本来、参照カウント付きポインタであるべきですが、このパッチ適用前は drm_file_update_pid() が filp->pid にその構造体へのポインタを格納し、dev->filelist_mutex を解放する前に struct pid の参照カウントを増加させるだけでした。これにより、以下の競合状態が可能になっていました:

プロセス A プロセス B ========= ========= drm_file_update_pid 開始 mutex_lock(&dev->filelist_mutex) rcu_replace_pointer(filp->pid, , 1) mutex_unlock(&dev->filelist_mutex) drm_file_update_pid 開始 mutex_lock(&dev->filelist_mutex) rcu_replace_pointer(filp->pid, , 1) mutex_unlock(&dev->filelist_mutex) get_pid() synchronize_rcu() put_pid() *** pid B が参照カウント 0 に達し、ここで解放される *** get_pid() *** UAF (Use-After-Free) *** synchronize_rcu() put_pid()

私の知る限り、この競合状態は CONFIG_PREEMPT_RCU=y の場合にのみ発生します。これは、スケジューラへの明示的な呼び出しがないコード内で RCU が静穏状態を検出する必要があるためです。

この競合状態により、「struct pid」の Use-After-Free (UAF) 脆弱性が引き起こされます。プロセス A が synchronize_rcu() オペレーションを通過している間に、プロセス B が mutex_unlock() と get_pid() の間にあるというタイミングで発生する必要があり、おそらくトリガーするのはやや困難です。

この修正では、ファイルに現在のタスクの pid へのポインタが格納される時点で、pid に対して追加の参照を取得することを保証します。

また、この修正により synchronize_rcu() の条件も削除されました。上記のロックレスチェックで通常は早期終了するため、その場合の最適化は無用な複雑さになると考えています。

If you want to get best quality of vulnerability data, you may have to visit VulDB.

責任者

Linux

予約する

2024年06月25日

モデレーション

承諾済み

エントリ

VDB-270427

エクスプロイト

ダウンロード

EPSS

0.00229

アクティビティ

非常低い

ソース

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!