Линус Торвальдс анонсировал новую версию ядра Linux 5.13, отдельно подчеркнув, что это самый большой релиз по количеству проделанной работы!
После седьмого релиз-кандидата у нас была довольно спокойная неделя, и я не вижу причин откладывать релиз версии 5.13. Изменений за последнюю неделю мало, всего 88 коммитов не считая слияний (и некоторые из них просто откаты). Это не особо важные исправления и поскольку их мало, я предлагаю людям просто просмотреть прилагаемый список изменений, чтобы узнать, что произошло. В целом в 5.13 очень много изменений. Фактически, это один из самых крупных релизов 5.х с более чем 16 тысячами коммитов (более 17 тысяч, если считать слияния) от более чем 2 тысяч разработчиков. Однако, все эти изменения затронули всё и понемногу, поэтому трудно выделить что-то одно…
Наиболее значимые изменения:
LSM-модуль Landlock для дополнительного ограничения процессов ;
возможность сборки в Clang с защитой CFI (Control Flow Integrit);
рандомизация стека ядра для каждого системного вызова;
поддержка одновременного сброса TLB;
поддержка чипов М1 (пока на начальной стадии);
поддержка новых GPU от Intel и AMD;
возможность прямого вызова функций ядра из BPF-программ;
виртуальное звуковое устройство на базе virtio;
multi-shot режим в io_uring.
Небольшая статистика в цифрах:
принято патчей – 17189 (2150 разработчиков);
изменено файлов – 12996 ;
добавлено строк кода – 794705;
удалено строк кода – 399590;
общий размер патча – 60МБ.
47% – драйверы устройств;
14% – специфические для аппаратных архитектур;
13% – сетевой стек;
5% – файловые системы;
4% – подсистемы ядра.
Одновременно c релизом ядра 5.13, латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 5.11 – Linux-libre 5.11-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем.
В новом выпуске проведена чистка драйвера "comedi". Прекращена чистка драйверов "cyclades", "isicom tty" и "i2400m wimax", которые были удалены из ядра. Обновлён код чистки блобов в драйверах и подсистемах "amdgpu", "i915 csr", "r8152 usb", "mhi bus", "x86 touchscreen" и "qualcomm arm64".
Дисковая подсистема, ввод/вывод и файловые системы
Для файловой системы SMB3 реализована опция монтирования "rasize", при помощи которой можно определить размер окна упреждающего чтения (readahead) для увеличения производительности некоторых видов нагрузки.
В файловой системе ext4 обеспечена перезапись элементов каталогов при удалении файлов, чтобы гарантировать, что имена удалённых файлов будут очищены. За счёт упреждающей загрузки битовых карт блоков повышена производительность кода для выделения блоков на недавно примонтированных ФС. В ext4 также разрешено одновременное использование режима работы без учёта регистра символов и шифрования.
В файловой системе exFAT добавлена поддержка ioctl-команды "FITRIM (discard)", для информирования накопителя о неиспользуемых в ФС блоках.
В файловой системе XFS добавлена возможность изъятия места из последней группы распределения в ФС, что стало первым звеном в реализации функции уменьшения размера существующих разделов с ФС XFS. Внесено несколько оптимизаций производительности.
В файловой системе Btrfs добавлено использование упреждающего чтения в команде "send", позволившая сократить время полной отправки на 10%, а инкрементальной на 25%. Для зонированных блочных устройств обеспечено автоматическое фонового перераспределения зон при превышении порога в 75% неиспользуемого пространства.
В файловую систему EROFS (Enhanced Read-Only File System) добавлена поддержка режима "big pcluster", позволяющего значительно увеличить производительность сжатия данных.
Добавлен новый системный вызов "quotactl_path", который отличается от "quotactl" тем, что позволяет управлять квотами не через файл специального устройства, а через указание пути к точке монтирования ФС.
В механизме "fanotify" расширены возможности, доступные непривилегированным пользователям. Например, по аналогии с inotify без прав "SYS_CAP_ADMIN" теперь можно отслеживать события "OPEN", "ACCESS", "MODIFY" и "CLOSE" для файлов и каталогов.
В распределённой файловой системе OrangeFS (продолжение развития PVFS) реализована поддержка операций упреждающего чтения, позволивших существенно увеличить производительность операций чтения (в тестах пропускная способность возросла с 21.8 MB/s до 386 MB/s).
Повышена масштабируемость хэширования Device Mapper за счёт перехода на rbtree. В dm-integrity добавлена поддержка операции "discard".
Память и системные сервисы
Добавлен новый контроллер 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), новый драйвер манипулирует относительными значениями, т.е. может снизить частоту на этапе начала значительного роста температуры, не дожидаясь преодоления порогового критического значения.
Реализована возможность одновременного сброса локального и внешнего буферов ассоциативной трансляции (TLB), которая привела к увеличению скорости прохождения теста Sysbench на 1-4%.
Виртуализация и безопасность
В состав включён LSM-модуль обеспечения изоляции приложений 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".
В предоставляемом ядром сервисе хранения ключей шифрования (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), обеспечивающей поддержание базы хэшей для проверки целостности данных.
Сетевая подсистема
Удалена поддержка технологии 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.
Проведена оптимизация подсистемы 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, которые могут использоваться в качестве основы для создания драйверов для конкретных устройств.
Добавлена поддержка процессора Loongson-2K1000, включающего два ядра MIPS64r2.
Добавлен звуковой драйвер "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.
Comments