CVE-2026-89480 in Linux
要約
〜によって VulDB • 2026年09月12日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
nvme-tcp: 転送されたバイト数が少なすぎる読み込みを拒否する
nvme_tcp_recv_data()は、現在のC2HData PDUが消費されるとリクエストを終了します。受信した総バイト数とコマンドで要求された長さを比較する処理がありません。struct nvme_tcp_requestには受信側のカウンターがなく、queue->data_remainingはキュー単位であり、blk_mq_end_request()は残りの概念を一切持たずにblk_rq_bytes(rq)に対して無条件に完了します。
そのため、コントローラは4096バイトの読み込みに対し512バイトで応答し、それが完全な読み込みとして報告される可能性があります。ユーザー空間では3584バイトがページ内に既に存在していたデータとなり、合計4096バイトが取得されます。私はテストターゲットを用いてこれを再現しました。
受信したバイト数をカウントし、成功した読み込みの数が一致しない場合に完了を拒否します。これは2つのNVME_TCP_F_DATA_SUCCESSパスおよびnvme_tcp_process_nvme_cqe()内で行われます。成功判定ではreq->statusが1ビット右シフトされます。これはドライバがワイヤ上の値を保持しており、完了時にそれをシフトするため、チェックは完了パスで確認される内容を見る必要があるためです。REQ_OP_READのみがチェック対象となります。なぜなら、ここでは長さがリクエストがカバーするセクタ数から来るからです。パsthroughコマンドはその送信者によって構築され、送信者がコマンドとバッファの両方を選択するため、カーネルには比較対象がありません。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.