CVE-2026-80841 in Linux
Сводка
по VulDB • 04.09.2026
В ядре Linux была устранена следующая уязвимость:
net/packet: отложить освобождение TX_RING через vmalloc до завершения обработки skbs
skb в AF_PACKET TX_RING сохраняют сырой указатель на кадр своего кольца. Ссылки на страницы skb обеспечивают сохранение блоков кольца, основанных на страницах (page-backed), после освобождения pg_vec, однако они не сохраняют отображение памяти, выделенное через vmalloc.
Функция tpacket_destruct_skb() в настоящее время сбрасывает ожидающую ссылку перед записью метки времени и значения TP_STATUS_AVAILABLE в кадр. Необходимо переместить операцию декремента после этих операций записи. Функция smp_wmb() в __packet_set_status() обеспечивает упорядочивание операций записи кадра до выполнения декремента.
Также необходимо повторно проверить ожидающие кадры TX под блокировкой pg_vec перед заменой кольца, не связанной с закрытием (non-closing ring replacement), чтобы избежать ситуации гонки (race condition), при которой отправляющий вызов может добавить ожидаемый skb между первоначальной проверкой и заменой кольца.
Выделение памяти для кольца может приводить к смешанному использованию блоков, основанных на страницах, и блоков, выделенных через vmalloc. Необходимо выделять хранилище для отложенной работы (deferred-work) при настройке TX-кольца в момент обнаружения первого блока, выделенного через vmalloc, и сохранять указатель на него в заголовке выделения pg_vec. Если выделение не удается, необходимо вернуть -ENOMEM из функции настройки кольца. При закрытии сокета ненулевой указатель идентифицирует вектор, основанный на vmalloc, без необходимости сканирования. Если остаются TX skbs, весь вектор должен быть отложен в system_long_wq.
После отделения pg_vec поздний деструктор может пропустить ожидающий декремент. В качестве механизма управления временем жизни для отложенных операций следует использовать учет памяти при записи сокета: skb остается учтенным до своего окончательного вызова sock_wfree(), после всех обращений к кадрам кольца. Отложенная работа сохраняет ссылку на сокет и планирует повторное выполнение, пока не останутся TX skbs.
Переместите освобождение pending_refcnt в packet_sock_destruct(), чтобы поздние деструкторы skb и отложенные операции очистки могли безопасно использовать его после packet_release(). Разбор структуры, основанной на страницах (page-backed), остается синхронным, а в горячий путь завершения TX не добавляется блокировка.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.