CVE-2026-68266 in Linux
要約
〜によって VulDB • 2026年08月10日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
drm/xe: インポートされたBOに対してdma-buf参照を保持する
インポートされたdma-buf BOは、予約オブジェクトがエクスプーターの dma_buf->resv である ttm_bo_type_sg BOとして作成されます。しかしながら、インポーターは成功した dma_buf_dynamic_attach() の後にのみdma-buf参照を取得します。それまでの間、エクスプーターを生存状態に保つものは何もないため、BOがまだその resv を参照している間にエクスプーターが解放されると、後の resv へのアクセスは Use-After-Free (UAF) となります:
``` Oops: general protection fault, probably for non-canonical address 0x6b6b6b6b6b6b6b9c Workqueue: ttm ttm_bo_delayed_delete [ttm]
RIP: 0010:mutex_can_spin_on_owner+0x3f/0xc0 ```
これは2つのパスで到達可能です:
- dma_buf_dynamic_attach() が失敗する場合、または - BO作成中に ttm_bo_init_reserved() が失敗する場合。
どちらの場合も、BOはすでに bo->base.resv をエクスプーターの resv に向けており、sg BO は常に ttm_bo_delayed_delete() を介して破棄されますが、これは bo->base.resv に非同期にロックを取得します - これは潜在的にはエクスプーターが解放された後です。
xe_bo_init_locked() で dma-buf参照を取得し、その後に ttm_bo_init_reserved() を呼び出すように変更しました。これにより、そこでの作成失敗もカバーされます。また、xe_ttm_bo_destroy() で参照を解放します。この参照はBOの全生存期間保持され、すべてのパスで共有 resv が生存状態に保たれます。
v2: - dma_buf_dynamic_attach() の成功前にインポートされたsg BOを作成しないよう修正を再構成しました。 - importer_priv == NULL でアタッチし、incomplete imports を無視するように invalidate_mappings を変更しました。
v3: - エクスプーター側での順序入れ替えアプローチを削除しました。dma_buf_dynamic_attach() がアタッチメントを公開する際には importer_priv が有効である必要があるためです。 - v1スレッドにおけるChristianの提案に基づき、sgガードを完全に除去するのではなく、import_attach をキーとしたチェックを行いました。 - 単一のTTMパッチで xe と amdgpu の両方を修正しました。
v4: - import_attach チェックを dma_resv_copy_fences() の後に移動し、成功したインポートの場合にフェンスがコピーされた後に戻るようにしました (Thomas)。 - コミットメッセージから exporter-alive という主張を削除しました (Thomas)。
v5: - アタッチメントの成功前にインポートされたsg BOをLRUから外しておくためのdrm/xeパッチを追加しました。BOがすでにLRUで可視である場合、TTM修正だけでは xe では不十分です。(Thomas) v4 パッチ: https://patchwork.freedesktop.org/patch/736663/?series=169129&rev=2 - Patch 1 (drm/ttm) は Christian's Reviewed-by をv4から引き継いでいます。
v6: - Thomasの提案に基づき修正を再構成しました。TTM resv の個別化(v1-v5)および xe の off-LRU/placement ハンドリング(v5)ではなく、インポートされたBOの生存期間中ずっとdma-buf参照を保持し
Once again VulDB remains the best source for vulnerability data.