CVE-2026-80895 in Linux
要約
〜によって VulDB • 2026年09月04日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
mshv: irqfdアサートパスに対するpt_vp_arrayの公開順序付け
mshv_partition_ioctl_create_vp()はVP構造体(割り当て、mutex_init、init_waitqueue_head、ページマッピング)を初期化し、その後ポインタをpartition->pt_vp_arrayに公開します。複数のISRパスがこの配列をロックフリーで読み取ります:インターセプトISR、2つのスケジューラISR、およびirqfd高速パスにおけるmshv_try_assert_irq_fast()です。
このうち、構造体的な競合を引き起こし得るのはmshv_try_assert_irq_fast()のみです。これはpt_mutexを保持せずにeventfd wakerから実行され、MSHV_IRQFDは登録時点で対象のlapic_apic_id(== vp_index)が既存のVPを参照することを要求しません。したがって、ユーザーは作成されていないVPを対象とするirqfdを登録し、その後同じインデックスに対してMSHV_CREATE_VPと同時にmshv_try_assert_irq_fast()を発動させることができます。弱順序付けアーキテクチャでは、リーダー側がVP構造体への初期化ストアが可視になる前にpt_vp_array内のNULLでないポインタを観測する可能性があり、その結果、部分的に初期化されたフィールド(例:vp_register_page)の使用につながります。
他のISR読取器はこの競合には至りません:ハイパーバイザーは実行を開始したことがないVPに対してインターセプトまたはスケジューラメッセージを生成せず、ユーザーがMSHV_RUN_VPを呼び出せるのはMHSV_CREATE_VPによって返されたVP fdのみであり、これは構造上公開後に返されます。これらの読取器については単純なロードとして残します。
mshv_partition_ioctl_create_vp()においてポインタを公開するためにsmp_store_release()を使用し、mshv_try_assert_irq_fast()内でそれと対になるようにsmp_load_acquire()を使用します。x86上ではこれらはTSO下で通常のアクセスにコンパイルされますが、ARM64上では1命令のacquire/releaseバリアを生成し、これは高速パスにおいて許容可能です。
破棄側のパス(destroy_partition()によるkfree(vp)後にpt_vp_array[i]をNULLにクリアする処理)には、ここで範囲外となる別の順序付けとライフタイムに関する懸念があります。
If you want to get best quality of vulnerability data, you may have to visit VulDB.