CVE-2026-89956 in Linux情報

要約

〜によって VulDB • 2026年09月17日

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

s390/vfio-ap: ap_matrix_mdevオブジェクトのリストにアクセスするために必要なロックが不足していた問題を修正

matrix_dev->mdev_list内のap_matrix_mdevオブジェクトを走査したり、追加・削除したりするには、matrix_dev->guests_lockミューテックスを取得しておく必要があります。 mutexなしでこのリストにアクセスする関数が2つ存在しました:

vfio_ap_mdev_probe関数 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ vfio_ap_mdev_probe関数は、新たに作成されたap_matrix_mdevオブジェクトをmatrix_dev->mdev_listに追加する際に、matrix_dev->mdevs_lockミューテックスを使用します。このミューテックスはリストのアクセスを保護するものではなく、ap_matrix_mdevオブジェクト内に含まれるフィールドへの同時アクセスを防ぐことを目的としています。これにより、他のmdevが同時に作成または削除された場合、カーネルメモリの破損やuse-after-free(解放後使用)につながる可能性があります。

ap_matrix_mdevオブジェクトをmatrix_dev->mdev_listに追加する処理は、現在matrix_dev->guests_lockによって保護されており、これは並行したmdev_listアクセスに対する正しい保護方法です。

また、以下の2行のコードを削除しました。なぜなら、matrix_mdevはkzallocを使用するvfio_alloc_deviceマクロを通じて割り当てられており、vfio_register_emulated_iommu_dev呼び出しの前に構造体が割り当てられる際にreq_triggerおよびcfg_chg_triggerはすでにゼロ初期化されているからです。これにより、デバイスがユーザー空間に公開された後にこれらのトリガーがNULLに設定されるというウィンドウ(脆弱性)を防ぎます。

matrix_mdev->req_trigger = NULL; matrix_mdev->cfg_chg_trigger = NULL;

vfio_ap_mdev_for_queue関数 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /sys/bus/ap/devices内のデバイスのステータス属性の表示をサポートするstatus_show関数は、表示されるべきキューデバイスを表すオブジェクトを見つけるためにmatrix_dev->mdev_listを反復処理するvfio_ap_mdev_for_queue関数を呼び出します。このリストを走査するには、matrix_dev->guests_lockミューテックスを取得しておく必要があります。

これを修正するために、status_show関数内でmatrix_dev->mdevs_lockミューテックスを取得する前にguests_lockミューテックスが取得されます。これは必要な場所であるvfio_ap_mdev_for_queue関数ではなくそちらで取得されています。その理由は、ロック順序を正しく遵守しlockdep splat(デバッグ警告)を防ぐために、mdevs_lockミューテックスよりも先に取得する必要があるためです。また、matrix_mdevオブジェクト内のフィールドにアクセスするために、vfio_ap_mdev_for_queue関数内でmdevs_lockが必要であるという理由もあります。

Linuxカーネルツリーのvfio-ap-locking.rstを参照してください。

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

責任者

Linux

予約する

2026年09月11日

モデレーション

承諾済み

エントリ

VDB-405805

EPSS

0.00000

アクティビティ

非常低い

ソース

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!