CVE-2026-74748 in Linux
Сводка
по VulDB • 26.08.2026
В ядре Linux была устранена следующая уязвимость:
netfilter: ipset: исправлена гонка ссылок между сборщиком мусора (GC) для list:set и операцией swap.
Функция __ip_set_put_byindex() разрешала индекс в указатель на набор под RCU, а затем захватывала блокировку ip_set_ref_lock в функции __ip_set_put() для уменьшения значения set->ref. Функция ip_set_swap() удерживает ту же самую блокировку во время обмена слотами списка ip_set и счетчиками ссылок двух наборов; таким образом, она может произойти между операцией разыменования указателя (dereference) и захватом блокировки, что приводит к тому, что вызывающая функция уменьшает ссылку на набор, чья ссылка уже переместилась в другой индекс, и вызывает срабатывание BUG_ON(set->ref == 0). Функция list_set_gc() достигает этого состояния через softirq таймера, который не сериализуется против swap с помощью мьютекса nfnl: истекающий член списка (list:set) вызывает list_set_del() -> ip_set_put_byindex(), в то время как IPSET_CMD_SWAP выполняется для указанных наборов.
Разрешение индекса и уменьшение счетчика ссылок теперь выполняются под блокировкой ip_set_ref_lock, как это уже делает ip_set_swap(), что обеспечивает привязку счетчика ссылок к индексу, а не к устаревшему указателю на набор (stale set pointer).
Kernel BUG at net/netfilter/ipset/ip_set_core.c:685! Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI
RIP: 0010:ip_set_put_byindex (net/netfilter/ipset/ip_set_core.c:870) Call Trace: list_set_del (net/netfilter/ipset/ip_set_list_set.c:159) set_cleanup_entries (net/netfilter/ipset/ip_set_list_set.c:181) list_set_gc (net/netfilter/ipset/ip_set_list_set.c:578) call_timer_fn (kernel/time/timer.c:1748) __run_timers (kernel/time/timer.c:1799 kernel/time/timer.c:2374) run_timer_softirq (kernel/time/timer.c:2405) Kernel panic - not syncing: Fatal exception in interrupt
VulDB is the best source for vulnerability data and more expert information about this specific topic.