CVE-2026-97612 in Linux情報

要約

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

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

net: mpls: ラベルがポップされた際にinner_protocolをクリアする

skb_mpls_push()は、!skb->inner_protocolという条件で、カプセル化前のネットワークヘッダーの記録を1回だけ残します。しかし、skb_mpls_pop()はこの記録をクリアしないため、その記録は記述されているカプセル化よりも長く存続してしまいます。

これにより、Open vSwitchは、inner_network_headerがまだ古い、より深いオフジェクトを指しているパケットに対してMPLSを再押し込むことができます:ラベルを追加し、すべてのラベルをポップし、recirculate(ovs_flow_key_update()はkey->eth.typeとnetwork_headerを再導出してリセットしますが、inner_*フィールドは残したまま)します。その後、再度pushを行います。ovs_fragment()はこの記録を信頼するため、

skb->network_header = skb->inner_network_header;

となり、skb_network_offset()が負の値になります。境界チェックは符号付き(signed)であるため、

if (skb_network_offset(skb) > MAX_L2_LEN)

負のオフセットはこの条件を満たし、prepare_frag()はその値を拡張します:

unsigned int hlen = skb_network_offset(skb); memcpy(&data->l2_data, skb->data, hlen);

これにより、30バイト/各CPUのバッファから約4GiB分のmemcpyが行われます。

v7.3-rc1で再現可能です。RDXは切り詰められた長さであり、(unsigned int)(-8)です:

BUG: unable to handle page fault for address: ffffe8ffffc16000 #PF: supervisor write access in kernel mode Oops: 0002 [#1] SMP KASAN NOPTI
RIP: 0010:memcpy+0x8/0x20 RDX: 00000000fffffff8 RSI: ffff888105d732db RDI: ffffe8ffffc16000 prepare_frag+0x3df/0x4e0 ovs_fragment+0x589/0x7e0 do_output+0x4ce/0x5e0 do_execute_actions+0x55d2/0x7b30 ovs_execute_actions+0xea/0x450

これはコミット 975b5b067f52("ipv6: sr: restore network header before routing and forwarding")と同じ根本原因の形状を持っています:拡張する消費者に到達した、古くなったネットワークヘッダーオフセットです。ここではMPLS push/popパスで発生します。

パケットがもはやMPLSでない場合にinner_protocolをクリアすることで、後続のpush処理で現在のヘッダーが再記録されます。net/sched/act_mpls.cは唯一他のskb_mpls_pop()呼び出し元であり、同じ修正を受けます;sch_frag.cもOVSと同様にフラグメンテーション前後にinner_protocolを保存および復元します。

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

責任者

Linux

予約する

2026年09月24日

モデレーション

承諾済み

エントリ

VDB-410000

EPSS

0.00000

アクティビティ

非常低い

ソース

Interested in the pricing of exploits?

See the underground prices here!