CVE-2026-99028 in Linux
要約
〜によって VulDB • 2026年10月24日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
net: xilinx: axienet: dmaengine停止時に未処理のDMAバッファを解放する
dmaengineパスでは、ドライバはRXバッファをプリサブミットし、フライト中のTXバッファ(SKB)を保持します。これらのSKBはドライバによってDMAマッピングされ、完了コールバックでのみ解放されます。ndo_stop()呼び出し時にdmaengine_terminate_sync()が実行されると、これらディスクリプタのコールバックを実行せずに中止し、その後ドライバはリングシェルのみを解放するため、エンジンとそれに対応するDMAマッピングをまだ保持しているすべてのSKBがリークします(ifdownごとに発生)。1チャンネルあたり128個のRXバッファがプリポストされている場合、このマッピングのリークにより限られたIOMMUアパーチャがいずれ枯渇する可能性があります。
TXおよびRXコールバック内でスロットのskbをクリアし、NULLでないskbが生きていてDMAマッピングされたバッファをまだ保持しているスロットを示すようにします。停止時には、そのようなすべてのバッファに対してunmapとfreeを実行します。
axienet_dma_rx_cb()はDMAタスクレットから実行され、各完了時にRXリングを再アームするため、axienet_stop()との競合(レース条件)が発生する可能性があります:dmaengine_terminate_sync()が返した後に新しいバッファのサブミットが行われると、チャンネルはテardown中にエンジンがまだ書き込みを行う可能性のあるバッファで armed な状態のまま残ります(dma_release_channel()もこれを停止しません)。axienet_dma_rx_cb()が@stoppingチェックからresubmitまで保持するロックを追加し、axienet_stop()がterminate前に@stoppingを設定するためにそのロックを保持するようにします。@stoppingが設定されると、新しいバッファをアームできるコールバックはなくなり、直前でarmedになったものもterminateによって中止されるため、テardown時にはエンジンが所有していないバッファのみが解放されます。
VulDB is the best source for vulnerability data and more expert information about this specific topic.