Релиз ядра Linux 5.13
28 июня 2021 года
После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 5.13. Среди наиболее заметных изменений: файловая система EROFS, начальная поддержка чипов Apple M1, cgroup-контроллер "misc", прекращение поддержки /dev/kmem, поддержка новых GPU Intel и AMD, возможность прямого вызова функций ядра из BPF-программ, рандомизация стека ядра для каждого системного вызова, возможность сборки в Clang с защитой CFI (Control Flow Integrity), LSM-модуль Landlock для дополнительного ограничения процессов, виртуальное звуковое устройство на базе virtio, multi-shot режим в io_uring.
В новую версию принято 17189 исправлений от 2150 разработчиков (самое большое в истории), размер патча - 60 МБ (изменения затронули 12996 файлов, добавлено 794705 строк кода, удалено 399590 строк). Около 47% всех представленных в 5.13 изменений связаны с драйверами устройств, примерно 14% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 13% связано с сетевым стеком, 5% - с файловыми системами и 4% c внутренними подсистемами ядра.
- Дисковая подсистема, ввод/вывод и файловые системы
- Добавлена поддержка файловой системы EROFS (Enhanced Read-Only File System), предложенной компанией Huawei для использования на разделах, доступных в режиме только для чтения. Новая ФС поддерживает хранение данных в сжатом виде и по сравнению с Ext4 демонстрирует похожую производительность при выполнении операций последовательного чтения, но в разы обгоняет Ext4 при случайном доступе к данным. Например, при уровне сжатия 4 и тестировании на сервере с жёстким диском ФС EROFS обогнала Ext4 в операциях случайного чтения более чем в шесть раз, а при использовании Android-смартфона с Flash почти в три раза. Как и в других read-only ФС структура EROFS существенно упрощена за счёт отбрасывания при реализации некоторых областей метаданных, таких как битовая карта свободных блоков.
- Для файловой системы SMB3 реализована опция монтирования "rasize", при помощи которой можно определить размер окна упреждающего чтения (readahead) для увеличения производительности некоторых видов нагрузки.
- В ФС ext4 обеспечена перезапись элементов каталогов при удалении файлов. В ext4 также разрешено одновременное использование режима работы без учёта регистра символов и шифрования.
- В ФС exFAT добавлена поддержка ioctl-команды FITRIM (discard), для информирования накопителя о неиспользуемых в ФС блоках.
- В ФС XFS добавлена возможность изъятия места из последней группы распределения в ФС, что стало первым звеном в реализации функции уменьшения размера существующих разделов с ФС XFS.
- Добавлен новый системный вызов quotactl_path, который отличается от quotactl тем, что позволяет управлять квотами не через файл специального устройства, а через указание пути к точке монтирования ФС.
- В механизме fanotify
расширены возможности, доступные непривилегированным пользователям. Например, по аналогии с inotify без прав SYS_CAP_ADMIN теперь можно отслеживать события OPEN, ACCESS, MODIFY и CLOSE для файлов и каталогов.
- Память и системные сервисы
- Добавлен новый контроллер cgroup - "Misc" (CONFIG_CGROUP_MISC), предназначенный для ограничения и отслеживания скалярных ресурсов, которыми можно управлять с использованием простого счётчика и ограничивать, задавая максимально допустимые значения. В качестве примера применения нового контроллера cgroup упоминается управление идентификаторами адресного пространства, применяемыми в механизме AMD SEV (Secure Encrypted Virtualization).
- В интерфейсе асинхронного ввода/вывода io_uring для запросов POLL реализован режим "multi-shot", при котором POLL не удаляется после генерации события, а остаётся активным и может генерировать несколько событий.
- Из realtime-ветки ядра перенесён код, обеспечивающий обработку программно генерируемых прерываний в потоках ядра, что позволяет вытеснять их более приоритетными процессами.
- Добавлена внутренняя библиотека netfs, в которую вынесены типовые функции, используемые в сетевых файловых системах.
- Для архитектуры PowerPC реализована поддержка пространств имён для времени (time namespaces), позволяющих использовать в контейнере своё время.
- Для архитектуры RISC-V реализована поддержка kexec, crash dump, kprobe и запуска ядра по месту (execute-in-place, выполнение с исходного носителя, без копирования в ОЗУ).
- В BPF-программах трассировки появилась возможность использования локального для задачи хранилища данных (task-local storage), обеспечивающего более высокую производительность за счёт привязки данных к конкретному BPF-обработчику.
- Реализован новый механизм для прямого вызова функций ядра из BPF-программ, который уже использован в реализации алгоритмов перегрузки TCP. Для обеспечения безопасности вызываемые функции должны быть явно определены в белом списке.
- В систему трассировки функций ftrace добавлена опция func-no-repeats, позволяющая отразить повторяющиеся последовательные вызовы функции в виде счётчика.
- В системный вызов userfaultfd(), предназначенный для обработки page faults (обращение к невыделенным страницам памяти) в пространстве пользователя, добавлена возможность управления частичными fault-ами, пои которых страница памяти присутствует, но нет записи в таблице страниц памяти.
- Прекращена поддержка специального файла /dev/kmem, при помощи которого можно получить доступ ко всему адресному пространству ядра. Данный файл признан устаревшим и создающим проблемы с безопасностью.
- Для чипов Intel реализован новый драйвер для управления охлаждением, позволяющий снижать частоту процессора при опасности перегрева. В отличие от имеющегося механизма активации TCC (Thermal Control Circuit), новый драйвер манипулирует относительными значениями, т.е. может снизить частоту на этапе начала значительного роста температуры, но не дожидаясь преодоления порогового критического значения.
- Виртуализация и безопасность
- В состав включён модуль обеспечения изоляции приложений Landlock, позволяющий ограничить взаимодействие с внешним окружением для группы процессов и разработанный с оглядкой на таким механизмы изоляции, как XNU Sandbox, Pledge/ Unveil. Логика предоставления доступа определяется при помощи BPF-программы, но в отличие от seccomp-bpf, Landlock не фильтрует системные вызовы и их аргументы, а позволяет ограничить использование объектов ядра, таких как иерархии файлов. При помощи Landlock любой процесс, в том числе непривигелированный, может надёжно изолировать себя и недопустить обхода изоляции в случае выявления уязвимостей или вредоносных изменений в приложении. Landlock позволяет процессу создать защищённые изолированные окружения, реализованные в форме дополнительного слоя над существующими системными механизмами управления доступом. Например, программа может запретить доступ к файлам за пределами рабочего каталога.
- Добавлена возможность рандомизации смещений в стеке ядра при обработке системных вызовов для усложнения атак на стек. Суть предложенной защиты в выборе случайного смещения стека при каждом системном вызове, что усложняет определение раскладки стека в памяти даже в случае получения информации об адресах, так как при следующем системном вызове базовый адрес стека изменится. Для включения рандомизации предложены параметр командной строки ядра "randomize_kstack_offset=on/off" и настройка CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT. Накладные расходы оцениваются приблизительно в 1% потери производительности.
- Добавлена поддержка сборки ядра с включением в компиляторе Clang механизма защиты CFI (Control Flow Integrity), добавляющего перед каждым косвенным вызовом функции проверки для выявления некоторых форм неопределённого поведения, которые потенциально могут привести к нарушению нормального потока управления (control flow) в результате выполнения эксплоитов, изменяющих хранимые в памяти указатели на функции. Для включения CFI предложен параметр CONFIG_CFI_CLANG. Сборка с CFI пока доступна только для архитектуры ARM64 (для систем x86 будет добавлена позднее).
- В предоставляемом ядром сервисе хранения ключей шифрования (key ring) механизм доверительных ключей (
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.