Релиз ядра Linux 5.11

После двух месяцев разработки Линус Торвальдс представил релиз ядра 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”) при выборе маршрута запросов ввода/вывода.
  • Память и системные сервисы
    • Добавлен новый механизм перехвата системных вызовов, основанный на 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.11Linux-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.

Release. Ссылка here.