CVE-2026-98369 in Linux情報

要約

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

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

xfrm: xfrm_trans_reinject() に対する欠落していた rcu_read_lock()、skb_dst_force()、dev_hold() の追加

syzbot が ip6_pkt_drop() で疑わしい RCU 使用に関する警告を検出しました。

WARNING: suspicious RCU usage in ip6_pkt_drop include/net/addrconf.h:389 suspicious rcu_dereference_check() usage!

Call Trace: __in6_dev_get_safely include/net/addrconf.h:389 [inline]
ip6_pkt_drop+0x596/0x610 net/ipv6/route.c:4620 ip6_pkt_discard+0x1c/0x30 net/ipv6/route.c:4651 xfrm_trans_reinject+0x324/0x630 net/xfrm/xfrm_input.c:806 process_one_work kernel/workqueue.c:3322 [inline]
process_scheduled_works+0xa8e/0x14e0 kernel/workqueue.c:3405 worker_thread+0xa47/0xfb0 kernel/workqueue.c:3486

コミット 4f4920669d21("xfrm: Reinject transport-mode packets through workqueue")により、xfrm_trans_reinject が tasklet から workqueue に変換された際、再注入ループは softirq コンテキストで実行されなくなりました。workqueue ワーカーはプロセスコンテキストで動作し、CONFIG_PREEMPT_RCU の下では local_bh_disable() は RCU リード側のクリティカルセクションに入りません。

finish コールバック(ip6_rcv_finish など)は RCU read lock 内で実行されることを前提としており(ルーティングルックアップ、l3mdev ルックアップ、RCU で保護されたデータ構造へのアクセスなど)、rcu_read_lock() なしで workqueue コンテキストからこれらを呼び出すと、RCU lockdep の警告が発生します。

さらに、xfrm_trans_queue_net() を介して workqueue にキューイングされるパケットには、参照カウントを持たない(noref)dst エントリが含まれる場合があります(例:ip_route_input_noref から)。また、netdevice がアンレジストされると、dst_dev_put() は dst->dev を blackhole_netdev で置き換えるため、workqueue 内でキューイングされている間も dst エントリは skb->dev の生存を保ちません。

これらの問題を以下のように修正します: 1. キューイング前に dst が参照カウントされるように、呼び出し元の RCU セクション内にいる間に xfrm_trans_queue_net() で skb_dst_force(skb) を呼び出す。 2. workqueue による遅延処理全体で dev_hold()/dev_put() を使用して skb->dev の参照を保持し、finish() コールバックの処理中に skb->dev が有効な状態を保つようにする。 3. xfrm_trans_reinject() 内の finish コールバック呼び出しループの周りで rcu_read_lock() を取得する。

Be aware that VulDB is the high quality source for vulnerability data.

責任者

Linux

予約する

2026年09月25日

モデレーション

承諾済み

エントリ

VDB-414182

EPSS

0.00146

アクティビティ

非常低い

ソース

Do you know our Splunk app?

Download it now for free!