CVE-2026-98803 in Linux情報

要約

〜によって VulDB • 2026年10月18日

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

net: stmmac: rx Scatter-Gather サポートの修正

受信フレームが dma_buf_sz より大きい場合、DMA はそれを複数の RX デスクリプタに散らばせて処理します(rx Scatter-Gather)。セカンダリ RX バッファ (sec_page) は、分割ヘッダー (SPH) が有効な場合にのみ割り当てられ、プログラムされていました。そのため、通常のフレームでは buffer2 が割り当てられておらず、有効なマッピングでもありませんでした。着信フレームが buffer1 をオーバーフローすると、DMA はそのオーバフローを未マップのセカンダリバッファアドレスに書き込み、IOMMU ベースのプラットフォームで SMMU 変換フォールトを引き起こしました:

arm-smmu 15000000.iommu: Unhandled context fault: fsr=0x402, iova=0x00000000, fsynr=0x7f0011, cbfrsynra=0x1c90, cb=11 arm-smmu 15000000.iommu: FSR = 00000402 [Format=2 TF], SID=0x1c90
arm-smmu 15000000.iommu: FSYNR0 = 007f0011 [S1CBNDX=127 WNR PLVL=1]

SPH フレームではないフレームに対して、独立したセカンダリ RX バッファをプログラムできるコア(GMAC4/XGMAC)で Scatter-Gather を有効にします。stmmac_init_rx_buffers() および stmmac_rx_refill() で buffer2 を割り当てて有効としてマークし、バッファ長計算時にこれを考慮に入れます。レガシーなコアには set_sec_addr 演算子がないため、buffer2 は無効のまま維持されます。

buffer2 はページオフセット 0 で DMA に渡されるため、すべてのモードでページプール同期ウィンドウが両方のバッファをカバーするように拡張されます:offset を 0 に設定し、max_len を dma_buf_sz + stmmac_rx_offset() に設定します。

FCS が buffer1/buffer2 の境界およびデスクリプタの境界にまたがる可能性があるため、pskb_trim() を使用して組み立てられたフレームの後方から FCS を削除するようになりました(以前は単一のバッファからのみ削除されていました)。これにより、1〜3バイトだけバッファをオーバーフローする場合の符号なしアンダーフローが回避されます。シングルバッファのフレームの場合、XDP プログラムは FCS を見てはいけないため、プログラム実行前に XDP バッファから FCS が除去されます。

ネイティブな XDP は現在、シングルバッファ(リニア)フレームのみをサポートしています。MAC によって受け入れられた過大なサイズフレーム(jumbo 有効化時)は buffer2 を介して受信されますが、XDP プログラムが見るのは buffer1 のみであるため、TX/REDIRECT 判定時にはフレームが切り捨てられて転送されます。このケースを処理するための XDP マルチバッファサポートは、後続の対応として計画されています。

AF_XDP zero-copy RX は今回の変更ではカバーされていません:ZC キューはまだ DMA アドレス 0 に buffer2 をプログラムしており(XGMAC には buffer2-valid ビットがないため)、buffer1 をオーバーフローする過大なサイズフレームは依然として同じ SMMU 変換フォールトを引き起こす可能性があります。この処理も後続の対応として計画されています。

If you want to get best quality of vulnerability data, you may have to visit VulDB.

責任者

Linux

予約する

2026年09月25日

モデレーション

承諾済み

エントリ

VDB-422043

EPSS

0.00166

アクティビティ

低い

ソース

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!