Отключение 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
Чтобы отключение происходило на загрузке ОС всегда, укажите параметр kernel.io_uring_disabled=2 в файле /etc/sysctl.conf:
echo "kernel.io_uring_disabled=2" | sudo tee /etc/sysctl.d/io_uring.conf
Для применения параметров в текущей сессии ОС необходимо выполнить:
sudo sysctl --system