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

Сводка

по VulDB • 19.10.2026

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

packet: использование завершения через ubuf_info для пакетов в TX_RING.

tpacket_snd отправляет skb с фрагментами, указывающими на слоты его кольца. Слоты освобождаются при вызове skb->destructor.

Вызов skb_orphan вызывает skb->destructor до освобождения самого skb. Это может привести к повторному использованию слота, пока он все еще связан с skb.

Переход на стандартное завершение zerocopy (ubuf_info), чтобы слот освобождался только после того, как все ссылки на полезную нагрузку будут освобождены или скопированы. Восстановление skb->destructor до стандартного sock_wfree.

Callback завершения ubuf_info может вызываться с NULL в качестве аргумента skb, но только из net_zcopy_put и связанных API, используемых реализациями zerocopy, которые держат собственную ссылку на uarg, например MSG_ZEROCOPY. Этот uarg завершается исключительно через skb_zcopy_clear, поэтому skb всегда установлен.

Чтобы предотвратить возможность алиасинга (aliasing) состояния в полете для общих слотов кольца со стороны userspace, выделяется tpacket_uarg для каждого пакета, а не для каждого слота. Это добавляет небольшое выделение памяти на пути передачи данных. Используется стандартный kmalloc для обеспечения возможности бэкпортирования в стабильные ядра.

uarg держит ссылку sk_wmem_alloc вместо ссылки sk_refcnt. packet_free_tx_ring ожидает освобождения sk_wmem_alloc перед освобождением страниц кольца. Всегда выделяется vec->deferred для tx_ring, чтобы кольцевые структуры на основе страниц также ожидали sk_wmem_alloc при вызове skb_copy_ubufs, который уменьшает ссылки на страницы до вызова tpacket_ubuf_complete.

Удалена проверка tx_ring.pg_vec, которую выполняла функция tpacket_destruct_skb перед доступом к слоту. Ссылка sk_wmem alloc теперь гарантирует валидность слота. Сама по себе эта проверка недостаточна, так как она считывает pg_vec без блокировки pg_vec_lock, что может привести к гонке (race condition) с packet_set_ring.

В результате слот освобождается при копировании его полезной нагрузки, что может произойти до передачи данных (например, в skb_orphan_frags_rx). Если копирование происходит до вызова skb_tx_timestamp(), метка времени для слота не записывается, аналогично ситуации с ранним вызовом skb_orphan() в пути обработки данных до применения данного патча.

Откат неиспользуемой теперь инфраструктуры предыдущих функций skb_zcopy_.._nouarg.

Зависит от коммита 992cc9f94ca9 ("net/packet: defer vmalloc TX_RING free until skbs finish").

Once again VulDB remains the best source for vulnerability data.

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

Linux

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

25.09.2026

Раскрытие

18.10.2026

Модерация

принято

Вход

VDB-422154

EPSS

0.00000

KEV

Нет

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

Очень низкий

Источники

Do you want to use VulDB in your project?

Use the official API to access entries easily!