【活用ガイド】

JVNDB-2026-027884

LinuxのLinux Kernelにおけるリソースのロックに関する脆弱性

概要

Linuxカーネルにおいて、以下の脆弱性が修正されました。drm/virtioにて、virtio_gpu_cursor_plane_update()およびvirtio_gpu_resource_flush()は、plane更新のために割り込み不能なresvロックを使用していますが、virtio_gpu_array_lock_resv()を介してフレームバッファBOのdma_resvをロックし、その戻り値を無視していました。この関数は、dma_resv_lock_interruptible()(ロック待機中にシグナルを受けた場合)で-EINTRを返す可能性や、dma_resv_reserve_fences()(フェンススロット割り当て)で-ENOMEMを返す可能性があり、その結果としてresvロックが保持されない状態となっていました。その後のキュー処理ではオブジェクト配列を巡回し、ロック保持が必須のdma_resv_add_fence()を呼び出します。lockdepが有効な場合、この状況はdma_resv_assert_held()をトリガーします。 WARNING: drivers/dma-buf/dma-resv.c:296 at dma_resv_add_fence+0x71e/0x840 Call Trace: virtio_gpu_array_add_fence virtio_gpu_queue_ctrl_sgs virtio_gpu_queue_fenced_ctrl_buffer virtio_gpu_cursor_plane_update drm_atomic_helper_commit_planes drm_atomic_helper_commit_tail commit_tail drm_atomic_helper_commit drm_atomic_commit drm_atomic_helper_update_plane __setplane_atomic drm_mode_cursor_universal drm_mode_cursor_common drm_mode_cursor_ioctl drm_ioctl __x64_sys_ioctl WARNINGを超えて、ロックなしでdma_resvのフェンスリストを変更すると、同時実行のリーダー・ライターと競合してリストの破損を招きます。両方の呼び出し箇所はatomic_update_planeコールバック内部で実行されており、DRMのatomicヘルパーはここでの失敗を許しません(実行時点でコミットはユーザ空間に対して署名済みであり、クリーンなロールバックパスが存在しないためです)。prepare_fbでのロック取得の移動は拒否されました。これは、ロックのスコープを広げることで同一のatomicコミット内における他のBOロックパスとデッドロックが発生する可能性があるためです。そこで、dma_resv_lock_interruptible()の代わりにdma_resv_lock()を使用するvirtio_gpu_lock_one_resv_uninterruptible()を導入しました。これにより、実際的なsyzbotトリガーとなっていた-EINTR失敗モードを排除し、コミット全体でのロック保有期間の延長も回避しています。このヘルパーは単一のBOをロックし、nentsが1より大きい場合は-EINVALを返します。両修正箇所とも正確に1つのBOをロックしています。これらの箇所ではvirtio_gpu_cursor_plane_update()およびvirtio_gpu_resource_flush()からこの関数を使用し、戻り値をチェックしてdma_resv_reserve_fences()による残存する-ENOMEMケースも適切に処理します。具体的には、オブジェクトを解放し、そのフレームのplane更新をスキップする対応を行っています。ここで操作されるフレームバッファBOは他コンテキストと共有されておらず、ロック競合も短時間で済むため、シグナル割り込み可能性を失うことは許容されます。virtio_gpu_array_lock_resv()の他の呼び出し元(ioctl経路)は従来通り割り込み可能なバージョンを使い続けます。このバグはsyzbotによって報告され、DRM_IOCTL_MODE_CURSOR経路におけるフォールトインジェクション(fail_nth)でトリガーされ、dma_resv_reserve_fences()の-ENOMEM分岐が強制されることで発覚しました。
CVSS による深刻度 (CVSS とは?)

CVSS v3 による深刻度
基本値: 7.8 (重要) [その他]
  • 攻撃元区分: ローカル
  • 攻撃条件の複雑さ: 低
  • 攻撃に必要な特権レベル: 低
  • 利用者の関与: 不要
  • 影響の想定範囲: 変更なし
  • 機密性への影響(C): 高
  • 完全性への影響(I): 高
  • 可用性への影響(A): 高
影響を受けるシステム


Linux
  • Linux Kernel 5.7 以上 6.1.175 未満
  • Linux Kernel 6.13 以上 6.18.34 未満
  • Linux Kernel 6.19 以上 7.0.11 未満
  • Linux Kernel 6.2 以上 6.6.142 未満
  • Linux Kernel 6.7 以上 6.12.92 未満
  • Linux Kernel 7.1

想定される影響

・当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。
・当該ソフトウェアが扱う全ての情報が書き換えられる可能性があります。
・当該ソフトウェアが完全に停止する可能性があります。
対策

リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。
ベンダ情報

CWEによる脆弱性タイプ一覧  CWEとは?

  1. 不適切なロック(CWE-667) [NVD評価]
共通脆弱性識別子(CVE)  CVEとは?

  1. CVE-2026-64098
参考情報

  1. National Vulnerability Database (NVD) : CVE-2026-64098
  2. 関連文書 : drm/virtio: use uninterruptible resv lock for plane updates - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/7930eee22cd3df61e85be8aa512032ab303b7167)
  3. 関連文書 : drm/virtio: use uninterruptible resv lock for plane updates - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/a2359a411b15f495d12cfda6a7db6855ebb7f90f)
  4. 関連文書 : drm/virtio: use uninterruptible resv lock for plane updates - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/8fadd01cf461fee5bb11506621339c548447e5c7)
  5. 関連文書 : drm/virtio: use uninterruptible resv lock for plane updates - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/9af1b6e175c82daf4b423da339a722d8e67a735a)
  6. 関連文書 : drm/virtio: use uninterruptible resv lock for plane updates - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/21ab64c77a30d56efc506c8fa2ad8959f8ce3d36)
  7. 関連文書 : drm/virtio: use uninterruptible resv lock for plane updates - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/c86077d512ee980cc91322211d35dbcd3175f64c)
更新履歴

  • [2026年08月12日]
      掲載