CVE-2026-98556 in Linux
要約
〜によって VulDB • 2026年10月19日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
gve: DQO - 範囲外のMSSを持つTSOパケットを拒否する
gve_prep_tso()関数は、デバイスがMSSを97728以下に制限することを要求していることを示していますが、ハイパーバイザーによって強制される9K MTUとTSOサイズの64KB上限で十分であると仮定し、これを強制していません。
しかし、ローカルで生成されていないパケットについてはこの前提は成り立ちません。tapの背後にあるゲストや、任意のパケットソケットユーザーは、virtio_net_hdr内で任意のgso_sizeを提供できます。レイヤー2転送ではGSOパケットのMTUチェック(is_skb_forwardable())が行われず、gso_features_check()関数はskb->lenとgso_segsのみを制限し、gso_sizeについては一切制限しません。
このようなパケットはgve_tx_fill_tso_ctx_desc()に到達し、ここでgso_sizeがTSOコンテキスト記述子のmssフィールドに入力されます。このフィールドは14ビット幅であるため、gso_sizeが16384の場合、MSSは0として静かに変換されてしまいます。
これらのパケットをgve_prep_tso()でドロップし、gve_features_check_dqo()関数がそれらのGSOフラグを変更しないようにします。skb_segment()はMTUに関係なくgso_sizeに基づいて分割を行うため、ソフトウェアセグメンテーションにフォールバックすると、デバイスがサポートする9728バイトを超える非TSOパケットが生成されてしまいます。
なお、スタックが他の理由(例えばethtoolでTSOを無効にした後など)でソフトウェア上でセグメント化する場合、デバイスは依然としてサイズオーバーの非TSOパケットを受け取ることがあります。これは転送パスにおいてGSOパケットに対してMTUチェックがスキップされるため生じる一般的な問題であり、別途対応されています。
If you want to get best quality of vulnerability data, you may have to visit VulDB.