После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 5.11. Среди наиболее заметных изменений: поддержка анклавов Intel SGX, новый механизм перехвата системных вызовов, виртуальная шина auxiliary, запрет сборки модулей без MODULE_LICENSE(), режим быстрой фильтрации системных вызовов в seccomp, прекращение сопровождения архитектуры ia64, перенос технологии WiMAX в ветку «staging», возможность инкапсуляции SCTP в UDP.

В новую версию принято 15480 исправлений от 1991 разработчиков,
размер патча — 72 МБ (изменения затронули 12090 файлов, добавлено 868025 строк кода,
удалено 261456 строк). Около 46% всех представленных в 5.11
изменений связаны с драйверами устройств, примерно 16% изменений имеют
отношение к обновлению кода, специфичного для аппаратных архитектур, 13%
связано с сетевым стеком, 3% — с файловыми системами и 4% c внутренними
подсистемами ядра.

Основные новшества:

  • Дисковая подсистема, ввод/вывод и файловые системы
    • В Btrfs добавлено несколько опций монтирования для применения при восстановлении данных с повреждённой ФС: «rescue=ignorebadroots» для монтирования, несмотря на повреждения некоторых корневых деревьев (extent, uuid, data reloc, device, csum, free space), «rescue=ignoredatacsums» для отключения проверки контрольных сумм для данных и «rescue=all» для одновременного включения режимов ‘ignorebadroots’, ‘ignoredatacsums’ и ‘nologreplay’.
      Прекращена поддержка опции монтирования «inode_cache», которая ранее была объявлена устаревшей. Проведена подготовка кода для реализации поддержки блоков с метаданными и данными, размером меньше страницы (PAGE_SIZE), а также поддержки режима зонированного выделения места.
      Небуферизованые (Direct IO) запросы переведены на инфраструктуру iomap. Оптимизирована производительность ряда операций, в некоторых случаях ускорение может достигать десятков процентов.

    • В 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») при выборе маршрута запросов ввода/вывода.
  • Память и системные сервисы
    • Добавлен новый механизм перехвата системных вызовов, основанный на 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). Подобные системы давно не встречаются в обиходе.
    • Для архитектуры MIPS добавлена поддержка тестирования покрытия кода (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-объектов из памяти, задействованной для ввода/вывода, позволившего ускорить работу с фреймбуфером на некоторых архитектурах.
    • В Kconfig прекращена поддержка Qt4 (оставлена поддержка Qt5, GTK и Ncurses).
  • Виртуализация и безопасность
    • В системный вызов seccomp() добавлена поддержка режима быстрого реагирования, позволяющего очень быстро определять разрешён или запрещён определённый системный вызов на основе прикреплённой к процессу таблицы полномочий (constant-action bitmap), не требующей запуска BPF-обработчика.
    • Интегрированы компоненты ядра для создания и управления анклавами на базе технологии 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() и позволяет организовать проверку корректности использования указателей для блокирования эксплуатации уязвимостей, вызванных обращением к уже освобождённым блокам памяти, переполнениями буфера, обращениями до инициализации и использованием вне текущего контекста.
    • Добавлен параметр «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 может использоваться для локализации проблем в сетях, охватывающих несколько независимых организаций, сотрудники которых имеют доступ только к своему оборудованию.
    • Добавлена поддержка инкапсуляции пакетов протокола SCTP в UDP-пакеты (RFC 6951), что позволяет использовать SCTP в сетях со старыми трансляторами адресов, напрямую не поддерживающими SCTP, а также реализовывать SCTP на системах, не предоставляющих прямого доступа к уровню IP.
    • Реализация технологии WiMAX перемещена staging и в будущем намечена для удаления, если не найдутся пользователи, которым необходим WiMAX. WiMAX уже не используется в публичных сетях, а в ядре единственным драйвером с которым можно использовать WiMAX остаётся устаревший драйвер Intel 2400m. В сетевом конфигураторе NetworkManager поддержка WiMAX была прекращена в 2015 году. В настоящее время WiMax практически полностью вытеснена такими технологиями, как LTE, HSPA+ и Wi-Fi 802.11n.
    • Проведена работа по оптимизации производительности обработки входящего 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. В драйвер Intel iwlwifi добавлена поддержка диапазона 6GHz (Ultra High Band). В драйвер Qualcomm Ath11k добавлена поддержка технологии быстрой настройки соединения FILS (Fast Initial Link Setup, стандартизирована как IEEE 802.11ai), позволяющей избавиться от задержек при роуминге во время миграции от одной точки доступа к другой.
  • Оборудование
    • В драйвере amdgpu реализована поддержка 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).

    • В драйвер nouveau добавлена начальная поддержка GPU NVIDIA на базе микроархитектуры «Ampere» (GA100, GeForce RTX 30xx), пока ограниченная средствами для управления видеорежимами.
    • Добавлена поддержка протокола 3WIRE, используемого в LCD-панелях. Добавлена поддержка панелей novatek nt36672a, TDO tl070wsh30, Innolux N125HCE-GN1 и ABT Y030XX067A 3.0. Отдельно можно отметить поддержку панели смартфонов OnePlus 6 и 6T, которая позволила организовать загрузку на устройствах немодифицированного ядра.
    • Добавлена поддержка первого дискретного USB4 хост-контроллера Intel Maple Ridge.
    • Добавлена поддержка звуковых кодеков Allwinner H6 I2S, Analog Devices ADAU1372, Intel Alderlake-S, GMediatek MT8192, NXP i.MX HDMI and XCVR, Realtek RT715 и Qualcomm SM8250.
    • Добавлена поддержка 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.