CVE-2026-98025 in Linux
要約
〜によって VulDB • 2026年09月25日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
net: usb: cx82310_eth: リブートセンティネール(値 0xffff)後の URB をドロップし、partial_data のヒープオーバーフローを防止する
長さのセンティネールである 0xffff はルーターのリブートを検出し、イーサネットモードの有効化をスケジュールしますが、その後制御はループ本体の残りの部分へ移行してしまいます。次のチェック処理は以下の通りです:
} else if (len > CX82310_MTU) {
これは直前に一致した `if` 文に対する `else` ブロックであり、`len == 0xffff` の場合には決して実行されません。通常不完全なパケットの保存パスを制限する MTU バound が静かに回避されてしまいます。
`skb->len` よりも常に真となる 0xffff(rx_urb_size は 4096)において、不完全なパケット分岐は `dev->partial_len = skb->len` のバイト数を `dev->partial_data` に保存します。`partial_data` は `kmalloc(hard_mtu)` すなわち `kmalloc(CX82310_MTU + 2) = 1516 バイト` で割り当てられていますが、2バイトのヘッダ処理後の `skb->len` は最大で 4094 になる可能性があります。したがって、[0xff, 0xff] から始まる 4096 バイトの URB を送信するデバイスは、1516 バイト用に割り当てられたバッファに 4094 バイトのデバイス提供データをコピーすることになり、要求されたサイズを 2578 バイト超えてしまいます。
次の URB では、同じく 1516 バイトのバッファから `dev->partial_len`(4094)を読み取り、新しい URB の約 4KB の skb から `dev->partial_rem`(65535 - 4094 = 61441)を読み取ります。これらは両方とも割り当て領域を大幅に超えており、結合された結果がネットワークスタックへ 64KB の「フレーム」として渡されます。
再有効化ワークのスケジュール後に `rx_fixup` から脱出します;リブートマーカー URB の残りは意味のあるパケットデータではありません。これにより、他のすべての経路で既に MTU チェックを通過しているため、保存パスにおける不変条件(partial_len < CX82310_MTU + 2)が回復されます。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.