CVE-2026-80789 in Linux情報

要約

〜によって VulDB • 2026年09月04日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

nvmet-tcp: コマンドバッファの割り当て前にSGLデータ長を制限する

nvmet_tcp_map_data()はホスト制御された32ビット sgl->lengthを読み取り、カプセル内オフセット記述子(タイプ 0x01)については、使用の前に port->inline_data_size と照合してチェックを行います。それ以外のすべてのSGL記述子タイプ――インラインではないトランスポート用 SGL データブロック記述子(タイプ (NVME_TRANSPORT_SGL_DATA_DESC << 4) | NVME_SGL_FMT_TRANSPORT_A、実際のホストがカプセル外書き込みに使用するタイプ)を含む――は、そのチェックを完全にスキップし、直接以下に進みます:

cmd->req.sg = sgl_alloc(len, GFP_KERNEL, &cmd->req.sg_cnt);

ここで len はネットワーク上の値から直接取得され、最大4 GiBまで制限なく使用されます。

nvmet_req_init() はコマンドのパースのみを行い、sgl->length を検査することはありません。また、transfer_len が検証される唯一の他の場所である nvmet_check_transfer_len() も、req->execute() から後で実行され、割り当てが既に完了した後に動作します。書き込みコマンドの場合、ターゲットは R2T で応答し、ホストからのデータ送信を待つためにコマンドを保留状態にします。もしホスト(または単に従来どおり続行しない認証されていないピア)が決してデータを送信しない場合、sgl_alloc() によるバッファはコマンの存続期間中メモリ上に残ったままになります。NVMe/TCP のデフォルト設定では必須の認証がないため、ターゲットポータルに到達し Fabrics コネクションを完了できる任意のピアは、単一の不正なコマンドでこれを誘発でき、キューや接続全体を通じて繰り返し実行することで増幅攻撃が可能です。これは、リモートかつ実質的に未認証のピアによってトリガーされる制限のないカーネルメモリ割り当てです。

このファイルが既に per-PDU H2C データを制限するために使用している NVMET_TCP_MAXH2CDATA の上限に対して len を検証し、あらゆる SGL 記述子タイプについて、いかなる割り当てを行う前にこれを実行します。これにより、インラインではない記述子のギャップは閉じられながら、カプセル内ケースに対する既存のより厳格な inline_data_size チェックは維持されます。

v6.19 KASAN スタンダード上でランタイム検証済み:この制限を適用すると、過大な非インライン SGL 長を持つ不正書き込みコマンドは sgl_alloc() が実行される前に拒否されます。以前はこの同じリクエストが ~256 MiB(最大4 GiB)の制限のないカーネル割り当てを引き起こし、ホストによって満たされない R2T を待機している間メモリ上に残っていました。

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

責任者

Linux

予約する

2026年08月26日

モデレーション

承諾済み

エントリ

VDB-398931

EPSS

0.00234

アクティビティ

非常低い

ソース

Do you want to use VulDB in your project?

Use the official API to access entries easily!