Перейти к основному содержимому
Отключение io_uring

Отключение io_uring

io_uring — это современный интерфейс асинхронного ввода-вывода в Linux, решающий задачу повышения производительности. Он позволяет приложению отправлять ядру множество операций (чтение, запись, открытие файлов, сетевые запросы) и получать уведомления о завершении через специальные кольцевые буферы в общей памяти.

Так как io_uring не покрывается рядом механизмов отслеживания системных вызовов и на момент выпуска ядра 6.1 являлся недостаточно проверенным модулем, в SELECTOS 1.3 бэкпортирована функциональность отключения io_uring из более нового ядра в соответствии с документацией.

В каких случаях следует отключать io_uring

Основная причина уязвимостей — это сложность и новизна кода io_uring в ядре. Это приводит к ошибкам в обработке граничных условий, проверке привилегий и управлении памятью. Злоумышленник может использовать эти ошибки для выполнения кода в ядре, повышения привилегий или отказа в обслуживании.

Если ваш сервис работает в среде, где запускается чужой код (контейнеры, облачные ВМ) или вы следуете жестким стандартам безопасности, стоит рассмотреть отключение io_uring.

О рисках использования io_uring можно узнать из отчета об ошибке.

Как отключить io_uring

В SELECTOS 1.3 есть возможность отключить io_uring, начиная с версии ядра 6.1.162-1+sel5u2.

Для применения изменений нужно обновить ядро, если необходимо, и выключить io_uring одним из способов ниже.

sudo sysctl -w kernel.io_uring_disabled=2
# или
echo 2 | sudo tee /proc/sys/kernel/io_uring_disabled