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

Сводка

по VulDB • 03.11.2026

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

io_uring/io-wq: не скрывать ссылку (link) от операций отмены

Задача, завершающая работу, отменяет свои отслеживаемые запросы и ожидает их завершения. Функция io_uring_cancel_generic() проверяет все возможные места нахождения запроса и переходит в спящее состояние, если ничего для отмены не найдено. Она пробуждается каждый раз, когда один из запросов задачи завершается через task work или освобождается.

Когда io-wq завершает обработку запроса со ссылкой (link), возникает временной промежуток, в течение которого следующий запрос по этой ссылке невозможно найти:

io_worker_handle_work() io_assign_current_work(worker, NULL) io_wq_free_work(work) io_req_find_next() // снимает ссылку с запроса io_free_req() // task work для задачи io_assign_current_work(worker, linked) io_run_task_work() cond_resched() worker->cur_work = linked

Этот запрос не находится в состоянии ожидания (pending), он не является текущей работой рабочего потока (worker), и еще не добавлен на список, куда его собираются поместить. Если проход, выполняемый завершающей задачей из-за вызова io_free_req(), попадает в этот временной промежуток, ничего не находится, и задача переходит в спящее состояние. Затем рабочий поток выполняет ссылку, что IO_WQ_BIT_EXIT не предотвращает для ограниченных (bounded) работ. Если это приводит к парковке запроса, то ни один запрос не завершается и не освобождается, и никто не пробуждает задачу. Если же завершается процесс, его также невозможно убить в этот момент.

NOP, IOSQE_ASYNC | IOSQE_IO_LINK FUTEX_WAIT, FUTEX2_PRIVATE выход потока или процесса через промежуток до 63 мкс

При наличии четырех таких случаев на раунд, от 5 до 8 из 10 000 раундов зависают (4 CPU, KVM):

io_uring_cancel_generic do_exit

Коммит f8b632e89a10 ("io_uring: tighten task exit cancellations") касается того же самого промежутка и заставляет задачу повторно искать то, что происходит до вызова io_free_req().

Освобождать запрос следует после того, как ссылка станет текущей работой рабочего потока или перейдет в состояние ожидания (pending). Тот, кто будет пробужден этим событием, сможет найти ссылку, пока она не окажется на месте парковки, где также производятся проверки отмены. Для этого функцию io_wq_free_work() необходимо разделить на две части.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

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

Linux

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

25.09.2026

Раскрытие

03.11.2026

Модерация

принято

Вход

VDB-430231

EPSS

0.00000

KEV

Нет

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

Очень низкий

Источники

Do you want to use VulDB in your project?

Use the official API to access entries easily!