CVE-2026-98968 in Linux
要約
〜によって VulDB • 2026年10月23日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
amt: リレーのGeneral Queryを受信パスから直接送信する
qdiscにキューイングされたskbは、skb->cb内の生ポインタを介して参照されるトンネルよりも長く生存することがあります。例えば、リレーでigmp_qrvが1に設定されている場合、トンネルは135秒間存続するため、amtデバイス上のnetem遅延(180秒)の方が長くなります。その結果、トンネルの有効期限が切れて解放された後、後のdequeue処理によってamt_dev_xmit()でuse-after-freeが発生します。
BUG: KASAN: slab-use-after-free in amt_dev_xmit+0x2763/0x2e20 Call Trace: amt_dev_xmit+0x2763/0x2e20 [drivers/net/amt.c:1262]
dev_hard_start_xmit+0x22f/0x620 sch_direct_xmit+0x12e/0xac0 netem_dequeue+0x333/0xc50 net_tx_action+0x35c/0xa60
amt_send_igmp_gq()およびamt_send_mld_gq()は、amt_rcv()のrcu_read_lock_bh()セクション内にあるamt_request_handler()からのみ呼び出されます。amt_request_handler()には、クエリの対象となるトンネルが既に存在します(そのセクション内で発見または作成されています)。dev_queue_xmit()を使用してクエリをキューイングすると、再びamt_dev_xmit()に戻り、そこではEthernetヘッダーが剥ぎ取られ、該当するトンネルに対してamt_send_membership_query()が呼び出されます。
代わりに、2つの送信元から直接その呼び出しを行うようにします。これは、受信パスから送信するamt_send_advertisement()と同じ方法です。クエリはqdiscに待機せず、トンネルの参照解除は発見または作成されたRCUセクション内でのみ行われ、skb->cbには何も保存されないため、ルックアップやrefcountの処理は不要になります。使用されなくなったamt_dev_xmit()のクエリ分岐、amt_skb_cb()、およびstruct amt_skb_cbを削除します。
動作の変更点: - リレー自身のGeneral Queryが、amtデバイスの出力パス(qdisc、tc egress (clsact/tcx)、netfilter egressフック、パケットタップ)を通らなくなります。ただし、アンダーレイ上ではUDPとして依然として可視です。 - 正常に送信されたクエリは、tx_droppedとしてカウントされなくなりました。従来のクエリ分岐はunlockラベルを通じて抜け出し、送信されたすべてのクエリをドロップ済みとしてカウントしていました。 - ユーザー空間のquerierなど外部から到達し、amt_dev_xmit()に到着するクエリ(リレー上)は、IGMP/MLDタイプのスイッチで現在ドロップされます。以前はskb->cbの内容を信頼しており、NULLトンネルがWARN_ON(1)を引き起こしていました。
Once again VulDB remains the best source for vulnerability data.