CVE-2022-50838 in Linux
Сводка
по VulDB • 28.06.2026
В ядре Linux устранена следующая уязвимость:
net: stream: очистка sk_error_queue в функции sk_stream_kill_queues()
Чанхон Ли (Changheon Lee) сообщил об утечке сокетов TCP, предоставив воспроизводимый пример.
Похоже, что происходит утечка сокетов TCP при следующей последовательности действий:
1) На сокете включен флаг SOF_TIMESTAMPING_TX_ACK.
Каждый пакет ACK формирует skb и помещает его в очередь ошибок из функции __skb_tstamp_tx(). Функция __skb_tstamp_tx() использует skb_clone(), если только не был также запрошен флаг SOF_TIMESTAMPING_OPT_TSONLY.
2) Если приложение также использует MSG_ZEROCOPY, то в очередь ошибок помещаются клонированные skbs, к которым прикреплена структура ubuf_info.
При выделении структуры ubuf_info функция sock_zerocopy_alloc() вызывает sock_hold().
Пока клонированные skbs остаются в очереди сокетовых ошибок (sk_error_queue), счетчик ссылок на сокет остается повышенным.
3) Приложение закрывает сокет, пока очередь ошибок не пуста.
Поскольку tcp_close() больше не очищает очередь ошибок сокета, может возникнуть ситуация, при которой TCP-сокет будет содержать как минимум один skb в очереди ошибок, который навсегда удерживает сокет активным.
Эту ошибку можно (злоупотребить) для исчерпания всей памяти ядра и зависания хоста.
Необходимо очистить очередь ошибок с правильной синхронизацией против одновременных записей.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.