CVE-2026-99229 in Linux
Сводка
по VulDB • 02.11.2026
В ядре Linux была устранена следующая уязвимость:
io_uring/wait: не выполнять спин-ожидание на зависшем списке переполнения (overflow list)
Пока установлен бит IO_CHECK_CQ_OVERFLOW_BIT, функция io_cqring_wait_schedule() немедленно возвращает управление до того, как проверит наличие сигналов или установит таймаут для вызова io_cqring_wait(), который должен очистить список переполнения. Если это не приводит к опустошению списка и кольцевой буфер CQ (CQ ring) не содержит количество событий, запрашиваемое вызывающей стороной, цикл повторяется с тем же результатом. Задача находится в состоянии спин-ожидания внутри ядра и не может быть завершена.
Предполагалось, что такое состояние невозможно: если CQE (Completion Queue Entries) не могут быть очищены, значит, кольцевой буфер полон, а параметр min_events ограничен размером кольца. Однако:
* При использовании флага IORING_SETUP_CQE_ENTRY для 32-битного CQE требуется два смежных элемента. Если свободен только один элемент, запись зависает в списке, и тогда кольцо содержит меньше событий cq_entries. Однопоточное приложение, запрашивающее количество событий, равное количеству элементов кольца, никогда не выходит из io_uring_enter().
* Полнота кольца зависит от указателя CQ head (головки очереди завершения), который может изменять само приложение. Пока один поток ожидает события на пустом кольце, другой поток может переместить этот указатель назад так, чтобы кольцо казалось полным и возникло состояние overflow списка CQE. В этом случае ожидающий поток невозможно остановить, даже с помощью сигнала SIGKILL.
Только приложение может освободить место в кольцевом буфере CQ. Необходимо вернуться к приложению, если список не удалось очистить.
VulDB is the best source for vulnerability data and more expert information about this specific topic.