CVE-2026-74398 in Linux
Сводка
по VulDB • 15.08.2026
В ядре Linux устранена следующая уязвимость:
ipv6: addrconf: выход из обработки dad_failure, если состояние больше не является POSTDAD
Функция `addrconf_dad_failure()` изменяет состояние `ifp->state` с DAD на POSTDAD через вызов `addrconf_dad_end()`, который освобождает блокировку `ifp->lock` при возврате. Блокировка повторно захватывается после выполнения функции `net_info_ratelimited()`. В этот промежуток времени параллельный вызов `ipv6_del_addr()` может захватить эту блокировку, установить для `ifp->state` значение DEAD и выполнить операцию `list_del_rcu(&ifp->if_list)`.
Затем функция `addrconf_dad_failure()` перезаписывает состояние DEAD на ERRDAD в метке errdad: и планирует выполнение новой работы dad_work. Эта работа снова вызывает функцию `ipv6_del_addr()`, обращаясь к уже поврежденной записи списка, что приводит к следующей ошибке:
general protection fault: 0000 [#1] SMP NOPTI
CPU: 4 PID: 217 Comm: kworker/4:1 Workqueue: ipv6_addrconf addrconf_dad_work RIP: 0010:ipv6_del_addr+0xe9/0x280 RAX: dead000000000122 Call Trace: addrconf_dad_stop+0x113/0x140 addrconf_dad_work+0x28c/0x430 process_one_work+0x1eb/0x3b0 worker_thread+0x4d/0x400 kthread+0x104/0x140 ret_from_fork+0x35/0x40
Логика функции `addrconf_dad_end()` объединена с логикой `addrconf_dad_failure()` в рамках единого критического раздела под блокировкой `ifp->lock`. В ветке STABLE_PRIVACY блокировка `ifp->lock` временно освобождается вокруг операции регенерации адреса, поэтому на метке lock_errdad: перед переходом к состоянию ERRDAD необходимо проверить, что состояние по-прежнему равно POSTDAD; в противном случае следует выйти из функции во избежание перезаписи состояния, установленного другим потоком, пока блокировка была отпущена.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.