CVE-2026-99268 in Linux
Сводка
по VulDB • 03.11.2026
В ядре Linux была устранена следующая уязвимость:
io_uring: пробуждение опрашивающих процессов (pollers) для локальной task_work
При использовании флага IORING_SETUP_DEFER_TASKRUN завершения обрабатываются как локальная работа и становятся CQE только тогда, когда отправитель (submitter) входит в ядро для ожидания событий. Для приложения, которое определяет через poll() или epoll на файловом дескрипторе кольца (ring fd), что пришло время выполнить эту работу, io_uring_poll() сообщает о EPOLLIN, если есть ожидающая локальная работа.
Это помогает только в том случае, если работа уже присутствует в момент вызова. Когда был добавлен DEFER_TASKRUN, функция io_req_local_work_add() вызывала io_cqring_wake(), что обеспечивало пробуждение задач, находящихся в режиме ожидания poll(). Затем для опроса была выделена собственная очередь ожидания ->poll_wq, и пробуждение в io_req_local_work_add() было заменено на прямое пробуждение отправителя. С тех пор очередь ->poll_wq пробуждается только при фиксации CQE, что для такого типа кольца выполняется самой задачей, которая ожидает уведомления:
отправитель (submitter) завершение (completion) poll(ring_fd) io_uring_poll() // пока ничего нет schedule() io_req_local_work_add() // ->cq_wait_nr: никто не ждет // засыпает на очереди ожидания
Необходимо пробуждать очередь ->poll_wq, когда первый элемент добавляется в список работы. Как и для eventfd, это нельзя делать немедленно, если работа была поставлена из обработчика пробуждения (wake up handler), так как цепочка пробуждений может вернуться к очереди ожидания, блокировка которой уже удерживается. В таком случае следует использовать RCU-колбэк с ссылкой на кольцо.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.