CVE-2026-99243 in Linux
Сводка
по VulDB • 03.11.2026
В ядре Linux была устранена следующая уязвимость:
io-wq: упорядочивание бита выхода относительно создания рабочих задач (worker creation task work)
Функция io_wq_exit_workers() отменяет задачи для запланированного создания рабочих потоков с помощью функции task_work_cancel_match(). При этом выполняется обычная загрузка значения поля task->task_works.
io_queue_worker_create() добавляет новую запись и проверяет флаг IO_WQ_BIT_EXIT, чтобы отменить её, если очередь задач (workqueue) уже находится в процессе завершения работы.
Это действие должно быть упорядочено. Функция task_work_add() использует полный барьер памяти через cmpxchg(). Однако io_wq_exit_start() устанавливает бит с помощью set_bit(), который не обеспечивает никакого порядка операций с памятью.
Таким образом, насколько я понимаю (afaict), на архитектурах со слабой упорядоченностью операционный поток, завершающий работу, может считывать значение task_works до того, как станет видимым запись бита. Другая сторона также проверяет бит до того, как эта запись станет видимой. В результате запись остается в очереди с увеличенным счетчиком worker_refs, а завершающий работу операционный поток бесконечно ожидает завершения работы рабочего потока (worker_done).
Если у операционного потока все еще есть кольца (rings), то io_uring_del_tctx_node() обеспечивает барьер памяти через test_and_set_bit() в функции io_wq_set_exit_on_idle(). Однако, когда он закрывает все кольца, этот барьер исчезает.
Добавить барьер после set_bit().
VulDB is the best source for vulnerability data and more expert information about this specific topic.