После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 5.11. Среди наиболее заметных изменений: поддержка анклавов Intel SGX, новый механизм перехвата системных вызовов, виртуальная шина auxiliary, запрет сборки модулей без MODULE_LICENSE(), режим быстрой фильтрации системных вызовов в seccomp, прекращение сопровождения архитектуры ia64, перенос технологии WiMAX в ветку “staging”, возможность инкапсуляции SCTP в UDP.
- Дисковая подсистема, ввод/вывод и файловые системы
- В Btrfs добавлено несколько опций монтирования для применения при восстановлении данных с повреждённой ФС: “rescue=ignorebadroots” для монтирования, несмотря на повреждения некоторых корневых деревьев (extent, uuid, data reloc, device, csum, free space), “rescue=ignoredatacsums” для отключения проверки контрольных сумм для данных и “rescue=all” для одновременного включения режимов ‘ignorebadroots’, ‘ignoredatacsums’ и ‘nologreplay’.
Прекращена поддержка опции монтирования “inode_cache”, которая ранее была объявлена устаревшей. Проведена подготовка кода для реализации поддержки блоков с метаданными и данными, размером меньше страницы (PAGE_SIZE), а также поддержки режима зонированного выделения места. - В XFS реализован флаг “needsrepair”, сигнализирующий о необходимости восстановления. При установке данного флага ФС нельзя примонтировать до тех пор, пока флаг не будет сброшен утилитой xfs_repair.
- В Ext4 предложены только исправления ошибок и оптимизации, а также проведена чистка кода.
- Разрешён повторный экспорт файловых систем, примонтированных поверх NFS (т.е. примонтированный через NFS раздел теперь можно экспортировать через NFS и использовать в качестве промежуточного кэша).
- В системный вызов close_range(), позволяющий процессу разом закрыть целый диапазон открытых файловых дескрипторов, добавлена опция CLOSE_RANGE_CLOEXEC для закрытия дескрипторов в режиме close-on-exec.
- В файловой системе F2FS добавлены новые вызовы ioctl(), позволяющие из пространства пользователя управлять тем, какие файлы сохраняются в сжатом виде. Добавлена опция монтирования “compress_mode=” для выбора размещения управляющего сжатием обработчика на стороне ядра или в пространстве пользователя.
- Предоставлена возможность монтирования Overlayfs непривилегированными процессами, используя отдельное пространство идентификаторов пользователей (user namespace).
Для проверки соответствия реализации модели безопасности проведён полный аудит кода. В Overlayfs также добавлена возможность запуска с использованием копий образов файловой системы через опциональное отключение проверки UUID. - В файловую систему Ceph добавлена поддержка протокола msgr2.1, позволяющего применять алгоритм AES-GCM при передаче данных в зашифрованном виде.
- В модуле dm-multipath реализована возможность учёта привязки к CPU (“IO affinity”) при выборе маршрута запросов ввода/вывода.
- В Btrfs добавлено несколько опций монтирования для применения при восстановлении данных с повреждённой ФС: “rescue=ignorebadroots” для монтирования, несмотря на повреждения некоторых корневых деревьев (extent, uuid, data reloc, device, csum, free space), “rescue=ignoredatacsums” для отключения проверки контрольных сумм для данных и “rescue=all” для одновременного включения режимов ‘ignorebadroots’, ‘ignoredatacsums’ и ‘nologreplay’.
- Память и системные сервисы
- Добавлен новый механизм перехвата системных вызовов, основанный на prctl() и позволяющий из пространства пользователя генерировать исключения при обращении к определённому системному вызову и эмулировать его выполнение. Указанная функциональность востребована в Wine и Proton для эмуляции системных вызовов Windows, что необходимо для обеспечения совместимости с играми и программами, напрямую выполняющими системные вызовы в обход Windows API (например, для защиты от несанкционированного использования).
- В системный вызов userfaultfd(), предназначенный для обработки page faults (обращение к невыделенным страницам памяти) в пространстве пользователя, появилась возможность отключения обработки исключений, возникающих на уровне ядра, для усложнения эксплуатации некоторых уязвимостей.
- В подсистему BPF добавлена поддержка локального для задачи хранилища данных (task-local storage), обеспечивающего привязку данных к конкретному BPF-обработчику.
- Полностью переделан учёт потребления памяти программами BPF – для управления использованием памяти в объектах BPF вместо memlock rlimit предложен контроллер cgroup.
- В механизме BTF (BPF Type Format), предоставляющем информацию для проверки типов в псевдокоде BPF, реализована поддержка модулей ядра.
- В интерфейс асинхронного ввода/вывода io_uring добавлена поддержка системных вызовов shutdown(), renameat2() и unlinkat(). При вызове io_uring_enter() добавлена возможность указания таймаута (проверить поддержку аргумента для указания таймаута можно при помощи флага IORING_FEAT_EXT_ARG).
- Архитектура ia64, применяемая в процессорах Intel Itanium, переведена в категорию оставленных без сопровождения (“orphaned”), что подразумевает прекращение тестирования. Компания Hewlett Packard Enterprise прекратила приём заказов на новое оборудование Itanium, а Intel сделал это ещё в прошлом году.
- Прекращена поддержка систем на базе архитектуры MicroBlaze, не укомплектованных блоком управления памятью (MMU). Подобные системы давно не встречаются в обиходе.
- Для архитектуры MISP добавлена поддержка тестирования покрытия кода (coverage testing) при помощи утилиты gcov.
- Добавлена поддержка виртуальной шины auxiliary для взаимодействия с многофункциональными устройствами, сочетающими функциональность, требующую разных драйверов (например, сетевые карты с поддержкой Ethernet и RDMA). Шина может использоваться для назначения для устройства первичного и вторичного драйвера, в ситуации, когда проблематично использование подсистемы MFD (Multi-Function Devices).
- Для архитектуры RISC-V добавлена поддержка системы распределения памяти CMA (Contiguous Memory Allocator), которая оптимизирована на выделение больших непрерывных областей памяти с использованием техники перемещения страниц памяти. Для RISC-V также реализованы средства ограничения доступа к /dev/mem и аккаунтинга времени обработки прерываний.
- Для 32-разрядных систем ARM добавлена поддержка отладочного инструмента KASan (Kernel address sanitizer), обеспечивающего выявление ошибок при работе с памятью. Для 64-разрядных ARM реализация
KASan переведена на использование тегов MTE (MemTag). - Добавлен системный вызов epoll_pwait2(), позволяющий использовать таймауты с наносекундной точностью (вызов epoll_wait манипулирует миллисекундами).
- В системе сборки обеспечен вывод ошибки при попытке сборки загружаемых модулей ядра, в которых при помощи макроса MODULE_LICENSE() не определена лицензия на код. Ошибку при сборке также отныне также будет вызывать использование макроса EXPORT_SYMBOL() для статических функций.
- Добавлена поддержка маппинга GEM-объектов из памяти, задействованной для ввода/вывода, позволившего ускорить работу с фреймбуфером на некоторых архитектурах.
- Виртуализация и безопасность
- Интегрированы компоненты ядра для создания и управления анклавами на базе технологии Intel SGX (Software Guard eXtensions), позволяющей приложениям выполнять код в изолированных зашифрованных областях памяти, доступ остальной системы к которым ограничен.
- В рамках инициативы по ограничению доступа из пространства пользователя к регистрам MSR (model-specific register) запрещена запись в регистр MSR_IA32_ENERGY_PERF_BIAS, позволяющий изменить режим энергоэффективности процессора (“normal”, “performance”, “powersave”).
- И ветки kernel-rt для систем реального времени перенесена возможность отключения миграции высокоприоритетных задач между CPU.
- Для систем ARM64 добавлена возможность применения тегов MTE (MemTag, Memory Tagging Extension) для адресов памяти обработчиков сигналов. Использование MTE включается через указание опции SA_EXPOSE_TAGBITS в sigaction() и позволяет организовать проверку корректности использования указателей для блокирования эксплуатации уязвимостей, вызванных обращением к уже освобождённым блокам памяти, переполнениями буфера, обращениями до инициализации и использованием вне текущего контекста.
- В системный вызов seccomp() добавлена поддержка режима быстрого реагирования, позволяющего очень быстро определять разрешён или запрещён определённый системный вызов на основе прикреплённой к процессу таблицы полномочий (constant-action bitmap), не требующей запуска BPF-обработчика.
- Добавлен параметр “DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING”, разрешающая подсистеме dm-verity проверять хэш-сигнатуры сертификатов, размещаемых во вторичном хранилище ключей (keyring). На практике настройка позволяет верифицировать не только сертификаты встроенные в ядро, но и сертификаты загруженные во время работы, что позволяет обновлять сертификаты без обновления всего ядра.
- В User-mode Linux добавлена поддержка режима suspend-to-idle, позволяющего заморозить окружение и использовать сигнал SIGUSR1 для вывода из спящего режима.
- В механизм virtio-mem, позволяющий выполнять горячее подключение и отключение памяти к виртуальным машинам, добавлена поддержка режима большого блока (BBM, Big Block Mode), дающего возможность передавать или забирать память блоками, превышающими размер блока памяти ядра, что необходимо для оптимизации VFIO в QEMU.
- В работающую на уровне ядра реализацию TLS добавлена поддержка шифра CHACHA20-POLY1305.
- Сетевая подсистема
- Для 802.1Q (VLAN) реализован механизм управления сбоями подключения (CFM, Connectivity Fault Management), позволяющий выявлять, верифицировать и изолировать сбои в сетях с виртуальными мостами (Virtual Bridged Networks). Например, CFM может использоваться для локализации проблем в сетях, охватывающих несколько независимых организаций, сотрудники которых имеют доступ только к своему оборудованию.
- Реализация технологии WiMAX перемещена staging и в будущем намечена для удаления, если не найдутся пользователи, которым необходим WiMAX. WiMAX уже не используется в публичных сетях, а в ядре единственным драйвером с которым можно использовать WiMAX остаётся устаревший драйвер Intel 2400m. В сетевом конфигураторе NetworkManager поддержка WiMAX была прекращена в 2015 году. В настоящее время WiMax практически полностью вытеснена такими технологиями, как LTE, HSPA+ и Wi-Fi 802.11n.
- Добавлена поддержка инкапсуляции пакетов протокола SCTP в UDP-пакеты (RFC 6951), что позволяет использовать SCTP в сетях со старыми трансляторами адресов, напрямую не поддерживающими SCTP, а также реализовывать SCTP на системах, не предоставляющих прямого доступа к уровню IP.
- Проведена работа по оптимизации производительности обработки входящего TCP-трафика в режиме zerocopy, т.е. без дополнительного копирования в новые буферы. Для трафика среднего размера, охватывающего десятки или несколько сотен килобайт данных, применение zerocopy вместо recvmsg() заметно эффективнее. Например, реализованные изменения позволили повысить эффективность обработки трафика в стиле RPC с сообщениями в 32 КБ при использовании zerocopy на 60-70%.
- Добавлены новый вызовы ioctl() для создания сетевых мостов, охватывающих несколько каналов PPP. Предложенная возможность позволяет кадрам перемещаться из одного канала в другой, например, из PPPoE в сеанс PPPoL2TP.
- Продолжена интеграция в ядро MPTCP (MultiPath TCP), расширения протокола TCP для организации работы TCP-соединения с доставкой пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам. В новом выпуске реализована поддержка опции ADD_ADDR, которую можно использовать для анонса доступных IP-адресов к которым возможно соединение при добавлении новых потоков к существующему соединению MPTCP.
- Добавлена возможность настройки действий при превышении бюджета поллинга соединений (busy-polling). Ранее доступный режим SO_BUSY_POLL подразумевал переключение на softirq при исчерпании бэджета. Для приложений, которым необходимо продолжать использовать поллинг предложена новая опция SO_PREFER_BUSY_POLL.
- В IPv6 реализована поддержка режимов SRv6 End.DT4 и End.DT6, применяемых для создания многопользовательских IPv4 L3 VPN и устройств VRF (Virtual routing and forwarding).
- В Netfilter унифицирована реализация выражений set, что позволило обеспечить возможность указания нескольких выражений для каждого элемента set-списков.
- В беспроводной стек 802.11 добавлены API для настройки ограничений мощности SAR, а также параметров AE PWE и HE MCS.
- Оборудование
- В драйвере amdgpu [[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1d36dffa5d887715dacca0f717f4519b7be5e498 реализована] поддержка APU AMD “Green Sardine” (Ryzen 5000) и GPU “Dimgrey Cavefish” (Navi 2), а также начальная поддержка APU AMD Van Gogh с ядром Zen 2 и GPU RDNA 2 (Navi 2). Добавлена поддержка новых идентификаторов APU Renoir (на базе CPU Zen 2 CPU и GPU Vega).
- В драйвере i915 для видеокарт Intel реализована поддержка
технологии IS (Integer scaling) с реализацией фильтра для увеличения масштаба с учётом состояния соседних пикселей (интерполяция Nearest-neighbor) для определения цвета отсутствующих пикселей. Расширена поддержка дискретных карт Intel DG1. Реализована поддержка технологии “Big Joiner”, присутствующей начиная с чипов Ice Lake / Gen11 и позволяющей использовать один транскодер для обработки двух потоков, например, для
вывода на 8K экран через один DisplayPort. Добавлен режим асинхронного переключения между двумя буферами в видеопамяти (async flip). - Добавлена поддержка протокола 3WIRE, используемого в LCD-панелях. Добавлена поддержка панелей novatek nt36672a, TDO tl070wsh30, Innolux N125HCE-GN1 и ABT Y030XX067A 3.0, а также поддержка панели для смартфона OnePlus 6/T.
- Добавлена поддержка ARM-плат, устройств и платформ: Galaxy Note 10.1, Microsoft Lumia 950 XL, NanoPi R1, FriendlyArm ZeroPi, Elimo Initium SBC, Broadcom BCM4908, Mediatek MT8192/MT6779/MT8167, MStar Infinity2M, Nuvoton NPCM730, Marvell Armada 382, Mikrotik на базе Marvell Prestera 98DX3236, серверы с Nuvoton NPCM750 BMC, Kontron i.MX8M Mini, Espressobin Ultra, “Trogdor” Chromebook, Kobol Helios64, Engicam PX30.Core.
- Встроена поддержка игровой консоли Ouya на базе NVIDIA Tegra 3.
Одновременно латиноамериканский Фонд свободного ПО сформировалвариант полностью свободного ядра 5.11 – Linux-libre 5.11-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске проведена чистка драйверов
для qat_4xxx (crypto), lt9611uxcm (dsi/hdmi bridge), ccs/smia++ (sensor), ath11k_pci, nxp audio transceiver и mhi pci controller. Обновлён код чистки блобов в драйверах и подсистемах amdgpu, btqca, btrtl, btusb, i915 csr. Отключены новые блобы в m3 rproc, idt82p33 ptp clock и qualcomm arm64.