| タイトル | LinuxのLinux Kernelにおける整数オーバーフローの脆弱性 |
|---|---|
| 概要 | Linuxカーネルにおいて、以下の脆弱性が修正されました:net: stmmac: チェーンモードにおける整数アンダーフローの修正です。jumbo_frm()のチェーンモード実装は無条件にlen = nopaged_len - bmax;を計算しています。ここで、nopaged_lenはskb_headlen(skb)(線形バイトのみ)を指し、bmaxはBUF_SIZE_8KiBまたはBUF_SIZE_2KiBです。しかし、呼び出し元のstmmac_xmit()はskb-len(ページフラグメントを含む全長)に基づきjumbo_frm()を呼び出すかどうかを決定しています:is_jumbo = stmmac_is_jumbo_frm(priv, skb-len, enh_desc); パケットの線形部分が小さい(nopaged_len = bmax)がページフラグメントにより全長が大きい場合(skb-len bmax)、引き算は符号なし整数でラップアラウンドし巨大なlen値(約0xFFFFxxxx)となります。これによりwhile (len != 0)ループが数十万回実行され、skb-data + bmax * iのポインタがskbバッファを大幅に超えてdma_map_single()に渡されます。IOMMU非搭載のSoC(stmmacの典型的な展開環境)では、これは任意のカーネルメモリをDMAエンジンにマップすることになり、カーネルメモリの情報漏洩およびハードウェアからの潜在的なメモリ破損を引き起こします。この問題はbuf_lenというローカル変数を導入し、min(nopaged_len, bmax)に制限することで修正しました。これによりlen = nopaged_len - buf_lenの計算は常に安全となります。線形部分が単一ディスクリプタに収まる場合はlenが0となり、while (len != 0)ループは自然にスキップされ、その後stmmac_xmit()内のフラグメントループがページフラグメントを処理します。 |
| 想定される影響 | 当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 また、当該ソフトウェアが扱う全ての情報が書き換えられる可能性があります。 さらに、当該ソフトウェアが完全に停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 |
| 対策 | リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 |
| 公表日 | 2026年4月24日0:00 |
| 登録日 | 2026年4月30日12:32 |
| 最終更新日 | 2026年4月30日12:32 |
| CVSS3.0 : 緊急 | |
| スコア | 9.8 |
|---|---|
| ベクター | CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Linux |
| Linux Kernel 3.2 |
| Linux Kernel 3.2.1 以上 5.10.253 未満 |
| Linux Kernel 5.11 以上 5.15.203 未満 |
| Linux Kernel 5.16 以上 6.1.169 未満 |
| Linux Kernel 6.13 以上 6.18.23 未満 |
| Linux Kernel 6.19 以上 6.19.13 未満 |
| Linux Kernel 6.2 以上 6.6.135 未満 |
| Linux Kernel 6.7 以上 6.12.82 未満 |
| Linux Kernel 7.0 |
| No | 変更内容 | 変更日 |
|---|---|---|
| 1 | [2026年04月30日] 掲載 |
2026年4月30日12:32 |
| 概要 | In the Linux kernel, the following vulnerability has been resolved: net: stmmac: fix integer underflow in chain mode The jumbo_frm() chain-mode implementation unconditionally computes len = nopaged_len - bmax; where nopaged_len = skb_headlen(skb) (linear bytes only) and bmax is is_jumbo = stmmac_is_jumbo_frm(priv, skb->len, enh_desc); When a packet has a small linear portion (nopaged_len <= bmax) but a Fix this by introducing a buf_len local variable clamped to |
|---|---|
| 公表日 | 2026年4月25日0:16 |
| 登録日 | 2026年4月25日4:08 |
| 最終更新日 | 2026年4月28日0:16 |