CVE-2026-98342 in Linux
要約
〜によって VulDB • 2026年10月06日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
dmaengine: dma_deviceの解放前にRCU読者からの待機を行う
dma_issue_pending_all()はrcu_read_lock()の下でlist_for_each_entry_rcu()を使用してdma_device_listを走査します。一方、dma_device_release()はlist_del_rcu()によってデバイスをリストから外し、その後device->device_release()(plx_dma.cなどの多くのドライバでは直接kfree()を呼び出す)を呼び出します。
デバイスがアンリンクされてから解放されるまでの間にグレース期間がないため、dma_issue_pending_all()内の並行するRCU読者は、デバイスが既に解放された後にそのデバイスにアクセスしてしまう可能性があります。
当初のロックレスな走査は、クライアントがプロバイダモジュール(したがってデバイス)をリストを横断している間保持するためのdmaengine参照を保持することに依存していました。しかし、コミット8ad342a86359「dmaengine: dma_device構造体への参照カウント追加」により、dma_deviceのライフタイムはモジュール参照から切り離されました。その結果、読者がまだリストを走査している間にデバイスが解放される可能性があります。
RCU読者が確実に終了することを保証するため、デバイスを解放する前にsynchronize_rcu()を追加します。これを無条件で保持してください:device_release()を実装していないプロバイダは、dma_async_device_unregister()の戻り値を受け取ると自身でデバイスを解放します。この呼び出しはdma_list_mutexを保持した状態でグレース期間待機するため安全であり、影響を受けるのはクリーンアップパスのみです。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.