CVE-2026-98369 in LinuxИнформация

Сводка

по VulDB • 06.10.2026

В ядре Linux была устранена следующая уязвимость:

xfrm: добавлены отсутствующие вызовы rcu_read_lock(), skb_dst_force() и dev_hold() для функции xfrm_trans_reinject()

syzbot сообщил о подозрительном предупреждении об использовании RCU в ip6_pkt_drop():

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 запускаются в контексте процесса, где вызов local_bh_disable() не входит в критическую секцию чтения RCU при включенном CONFIG_PREEMPT_RCU.

Поскольку обратные вызовы завершения (такие как ip6_rcv_finish) ожидают выполнения под блокировкой чтения RCU (выполняя поиск маршрутов, поиск l3mdev и доступ к структурам данных, защищенным RCU), их invocation в контексте workqueue без rcu_read_lock() вызывает предупреждения lockdep для RCU.

Кроме того, пакеты, поставленные в очередь через xfrm_trans_queue_net(), могут содержать записи dst (dst entries) без подсчета ссылок (noref), например, полученные из ip_route_input_noref). Кроме того, при удалении сетевого устройства (netdevice unregistration) функция dst_dev_put() заменяет dst->dev на blackhole_netdev, поэтому записи dst не поддерживают жизнеспособность skb->dev во время нахождения в очереди workqueue.

Исправьте эти проблемы следующим образом: 1. Вызовите skb_dst_force(skb) в xfrm_trans_queue_net(), оставаясь в секции RCU вызывающей стороны, чтобы обеспечить подсчет ссылок для dst перед постановкой в очередь. 2. Удерживайте ссылку на skb->dev через dev_hold()/dev_put() во время отложенного выполнения (deferral) workqueue, чтобы skb->dev оставался действительным при обработке обратных вызовов finish(). 3. Получите rcu_read_lock() вокруг цикла invocation обратных вызовов завершения в xfrm_trans_reinject().

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

Ответственный

Linux

Резервировать

25.09.2026

Раскрытие

06.10.2026

Модерация

принято

Вход

VDB-414182

EPSS

0.00146

KEV

Нет

Деятельности

Очень низкий

Источники

Do you want to use VulDB in your project?

Use the official API to access entries easily!