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 (重要) [その他]
| |
| 影響を受けるシステム | |
|
| |
Linux | |
|
| |
| 想定される影響 | |
・当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 | |
| 対策 | |
リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 | |
| ベンダ情報 | |
|
| |
| CWEによる脆弱性タイプ一覧 CWEとは? | |
| |
| 共通脆弱性識別子(CVE) CVEとは? | |
|
| |
| 参考情報 | |
| |
| 更新履歴 | |
|
| 公表日 | 2026/07/19 |
| 登録日 | 2026/08/12 |
| 最終更新日 | 2026/08/12 |



