После двух месяцев разработки Линус Торвальдс представил релиз ядра 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 для файлов и каталогов.
- Для чипов Intel реализован новый драйвер для управления охлаждением, позволяющий снижать частоту процессора. В отличие от имеющегося механизма активации TCC (Thermal Control Circuit), новый драйвер манипулирует относительными значениями, т.е. может снизить частоту на этапе начала значительного роста температуры, но не дожидаясь преодоления порогового критического значения.
- Память и системные сервисы
- Добавлен новый контроллер 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, при помощи которого можно получить доступ ко всему адресному пространству ядра. Данный файл признан устаревшим и создающим проблемы с безопасностью.
- Виртуализация и безопасность
- В состав включён модуль обеспечения изоляции приложений Landlock, позволяющий ограничить взаимодействие с внешним окружением для группы процессов и разработанный с оглядкой на таким механизмы изоляции, как XNU Sandbox, FreeBSD Capsicum и OpenBSD
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) механизм доверительных ключей (Trusted Keys) теперь охватывает не только ключи из TPM-модулей, но и из окружений TEE (Trusted Execution Environment). Для управления источником доверительных ключей предложен загрузочный параметр “trusted.source”. Кроме того, добавлена возможность обработки доверительных ключей в формате ASN.1.
- Добавлен параметр для упреждающей загрузки списка отозванных сертификатов во время загрузки ядра. Решена проблема (CVE-2020-26541) с игнорированием в чёрном списке UEFI Secure Boot сертификатов, поставляемых в формате EFI_CERT_X509_GUID, что позволяло загрузить систему с отозванным сертификатом.
- В криптоподсистему ядра добавлена поддержка проверки цифровых подписей ECDSA на базе эллиптических кривых.
- Реализована возможность верификации политик SELinux при помощи подсистемы IMA (Integrity Measurement Architecture), обеспечивающей поддержание базы хэшей для проверки целостности данных.
- В состав включён модуль обеспечения изоляции приложений Landlock, позволяющий ограничить взаимодействие с внешним окружением для группы процессов и разработанный с оглядкой на таким механизмы изоляции, как XNU Sandbox, FreeBSD Capsicum и OpenBSD
- Сетевая подсистема
- Удалена поддержка технологии WiMAX, которая уже не используется в публичных сетях, а в ядре единственным драйвером с которым можно использовать WiMAX остаётся устаревший драйвер Intel 2400m. В сетевом конфигураторе NetworkManager поддержка WiMAX была прекращена в 2015 году. В настоящее время WiMax практически полностью вытеснена такими технологиями, как LTE, HSPA+ и Wi-Fi 802.11n.
- Добавлен драйвер для сетевого адаптера MANA (Microsoft Azure Network Adapter).
- В драйвер ath11k добавлена поддержка беспроводных модулей Qualcomm QCN9074 с поддержкой 802.11ax.
- В драйвере iwlwifi реализована возможность пассивного сканирования каналов в диапазоне 6GHz. Для Украины добавлена поддержка включения/выключения IEEE 802.11ax-2021 на основе параметров в BIOS.
- Проведена оптимизация подсистемы XDP (eXpress Data Path), позволяющей манипулировать сетевыми пакетами на стадии до их обработки сетевым стеком ядра Linux. Проведённые тесты демонстрируют увеличение производительности XDP на 4-8%. Для устройств virtio производительность программной обработки AF_XDP увеличилась до 33%.
- В ICMP реализована поддержка расширенных PROBE-сообщений, определённых в RFC 8335.
- Продолжена интеграция в ядро MPTCP (MultiPath TCP), расширения протокола TCP для организации работы TCP-соединения с доставкой пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам. В новом выпуске добавлена поддержка sockopt для задания типовых опций TCP. Реализована возможность сброса отдельных подпотоков (subflow).
- В netfilter добавлена поддержка управления ресурсами при помощи унифицированной иерархии cgroups v2.
- В ethtool реализован интерфейс для чтения статистики IEEE MIB с поддержкой mlx5 и bnxt. Сетевым драйверам разрешено извлечение произвольных данных из SFP EEPROM, манипулируя не связкой смещение+размер, а страницами памяти.
- Оборудование
- Реализована начальная поддержка ARM-чипа Apple M1, охватывающая контроллер прерываний, таймер, UART, SMP, функции для организации ввода/вывода и MMIO. Обратный инжиниринг GPU пока не завершён, для организации вывода в патчах предоставляется поддержка фреймбуфера и консоли через последовательный порт.
- Продолжена чистка ядра от старых драйверов, удалены драйверы “gasket” (Google ASIC), “sysace”, “umem” и несколько старых драйверов для последовательных портов.
- После 13 лет нахождения в ветке staging стабилизирован и перенесён в основной состав драйвер “comedi” для поддержки устройств сбора данных.
- Добавлен драйвер GUD (Generic USB Display) с реализацией базового драйвера для экранов и TV-адаптеров, подключаемых через интерфейс USB. Драйвер предоставляет DRM-свойства (Direct Rendering Manager) для поворота изображения, управления яркостью, доступа к EDID, настройки видеорежимов и подключения TV, которые могут использоваться в качестве основы для создания драйверов для конкретных устройств.
- Добавлен звуковой драйвер “virtio” с реализацией виртуального звукового устройства, которое можно использовать в гостевых системах для вывода и записи звука без проброса доступа к звуковой карте и без эмуляции.
- В драйвере amdgpu добавлена начальная поддержка GPU Aldebaran (gfx90a). Включена начальная поддержка технологии адаптивной синхронизации FreeSync для HDMI (ранее была доступна для DisplayPort), которая позволяет корректировать частоту обновления информации на экране. Включена поддержка ASSR (Alternate Scrambler Seed Reset). Добавлен ioctl для запроса возможностей, связанных с кодированием и декодированием видео.Добавлен режим CONFIG_DRM_AMD_SECURE_DISPLAY для обнаружения изменений в дисплеях, отображающих критически важную информацию. Добавлена поддержка механизма энергосбережения ASPM.
- В драйвере i915 для видеокарт Intel включена поддержка чипов Intel Alderlake-S. Добавлена поддержка eDP MSO (Embedded DisplayPort Multi-SST Operation).
- Добавлена поддержка игрового контроллера Luna (Amazon), а также сенсорных экранов Hycon HY46XX, ILITEK Lego Series и MStar MSG2638
Одновременно латиноамериканский Фонд свободного ПО сформировалвариант полностью свободного ядра 5.11 – Linux-libre 5.11-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске проведена чистка драйвера comedi. Прекращена чистка драйваеров cyclades, isicom tty и i2400m wimax, которые были удалены из ядра. Обновлён код чистки блобов в драйверах и подсистемах amdgpu, i915 csr, r8152 usb, mhi bus, x86 touchscreen и qualcomm arm64.