Релиз ядра Linux 5.2
8 июля 2019 года
После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 5.2. Среди наиболее заметных изменений: режим работы Ext4 без учёта регистра символов, раздельные системные вызовы для монтирования ФС, драйверы для GPU Mali 4xx/ 6xx/7xx, возможность обработки изменения значений sysctl в программах BPF, device-mapper модуль dm-dust, защита от атак MDS, поддержка Sound Open Firmware для DSP, оптимизация производительности BFQ, доведение подсистемы PSI (Pressure Stall Information) до возможности использования в Android.
В новую версию принято 15100 исправлений от 1882 разработчиков, размер патча - 62 Мб (изменения затронули 30889 файлов, добавлено 625094 строк кода, удалено 531864 строк). Около 45% всех представленных в 5.2 изменений связаны с драйверами устройств, примерно 21% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 3% - файловыми системами и 3% c внутренними подсистемами ядра. 12.4% всех изменений подготовлено компанией Intel, 6.3% - Red Hat, 5.4% - Google, 4.0% - AMD, 3.1% - SUSE, 3% - IBM, 2.7% - Huawei, 2.7% - Linaro, 2.2% - ARM, 1.6% - Oracle.
- Дисковая подсистема, ввод/вывод и файловые системы
- Для Ext4 добавлена поддержка работы без различия регистра символов в именах файлов, которая активируется только в привязке к отдельным пустым каталогам при помощи нового атрибута "+F" (EXT4_CASEFOLD_FL). При установке данного атрибута на каталог все операции с файлами и подкаталогами внутри будут производиться без учёта регистра символов, в том числе регистр будет игнорироваться при операциях поиска и открытия файлов (например, файлы Test.txt, test.txt и test.TXT в подобных каталогах будут считаться одинаковыми). По умолчанию ФС продолжает быть регистрозависимой, за исключением каталогов с атрибутом "chattr +F";
- Унифицированы функции обработки символов UTF-8 в именах файлов, которые применяются при выполнении операций сравнения и нормализации строк;
- В XFS добавлена инфраструктура для отслеживания состояния файловой системы и новый ioctl для запроса статуса работоспособности. Реализована экспериментальная возможность для проверки на лету (online scrub) счётчиков суперблока.
- Добавлен новый модуль device-mapper "dm-dust", позволяющий симулировать появление bad-блоков на носителе или ошибок при чтении с диска. Модуль позволяет упростить отладку и тестирование приложений и различных систем хранения в условиях возможного появления сбоев;
- Проведена значительная оптимизация производительности планировщика ввода/вывода BFQ. В условиях высокой нагрузки на ввод/вывод внесённые оптимизации позволяют до 80% сократить время таких операций, как запуск приложений;
- Добавлена серия системных вызовов для монтирования файловых систем: fsopen(), open_tree(), fspick(), fsmount(), fsconfig() и move_mount(). Данные системные вызовы позволяют раздельно обработать разные стадии монтирования (обработать суперблок, получить информацию об ФС, примонтировать, прикрепить к точке монтирования), которые ранее выполнялись при помощи общего системного вызова mount(). Раздельные вызовы дают возможность выполнять более сложные сценарии монтирования и отдельно выполнять такие операции, как перенастройка суперблока, включение опций, изменение точки монтирования и перенос в другое пространство имён. Кроме того, раздельная обработка позволяет точно определять причины вывода кодов ошибок и задавать несколько источников для многослойных ФС, таких как overlayfs;
- В интерфейс для асинхронного ввода/вывода io_uring добавлена новая операция IORING_OP_SYNC_FILE_RANGE, выполняющая действия, эквивалентные системному вызову sync_file_range(), а также реализована возможность регистрации eventfd с io_uring и получения уведомлений о завершении операций;
- Для файловой системы CIFS добавлен ioctl FIEMAP, обеспечивающий эффективное cопоставление экстентов, а также поддержка режимов SEEK_DATA и SEEK_HOLE;
- В подсистеме FUSE предложен API для управления кэшированием данных;
- В Btrfs проведена оптимизация реализации qgroups и повышена скорость выполнения fsync для файлов с несколькими жесткими ссылками. Улучшен код проверки целостности данных, который теперь учитывает возможное повреждение информации в ОЗУ перед сбросом данных на диск;
- В CEPH добавлена поддержка экспорта снапшотов через NFS;
- Улучшена реализация монтирования NFSv4 в режиме "soft" (при возникновении ошибки доступа к серверу в режиме "soft" вызов в сразу возвращает код ошибки, а в режиме "hard" управление не отдаётся до возобновления доступности ФС или таймаута). В новом выпуске обеспечена более точная обработка таймаута, ускорено восстановление после сбоя и добавлена новая опция монтирования "softerr", позволяющая изменить код ошибки (ETIMEDOUT), возвращаемый при наступления таймаута;
- В API nfsdcld, предназначенном для отслеживания состояния клиентов NFS, обеспечена возможность корректного отслеживания NFS-сервером состояния клиента при перезагрузке. Таким образом, демон nfsdcld теперь может выполнять роль обработчика nfsdcltrack;
- Для AFS добавлена эмуляция блокировок дапазонов байт в файлах ( Byte Range Locking);
- Виртуализация и безопасность
- Проведена работа по устранению мест в ядре, допускающих выполнение кода из доступных на запись отражённых областей памяти, что позволяет блокировать потенциальные бреши, которые могут быть эксплуатированы при атаке;
- Добавлен новый параметр командной строки ядра "mitigations=", предоставляющий упрощённый способ управления включением тех или иных техник защиты от уязвимостей, связанных со спекулятивным выполнением инструкций в CPU. Передача "mitigations=off" выключает все имеющиеся методы, а применяемый по умолчанию режим "mitigations=auto" включает защиту, но не влияет на использование Hyper Threading. Режим "mitigations=auto,nosmt" дополнительно выключает Hyper Threading, если того требует метод защиты.
- Добавлена поддержка электронной цифровой подписи по ГОСТ Р 34.10-2012 (RFC 7091, ISO/IEC 14888-3), разработанная Виталием Чикуновым из "Базальт СПО". Во встроенную реализацию TLS добавлена поддержка AES128-CCM. В модуль crypto_simd добавлена поддержка алгоритмов AEAD;
- В Kconfig добавлена отдельная секция "kernel hardening" с опциями для усиления защиты ядра. В настоящее время в новой секции пока собраны только настройки для включения усиливающих проверки GCC-плагинов;
- Код ядра почти избавлен от непрерывающихся выражений casе в switch (без return или break после каждого блока case). Осталось исправить 32 из 2311 случая подобного использования switch, после чего при сборке ядра можно будет применять режим "-Wimplicit-fallthrough";
- Для архитектуры PowerPC реализована поддержка аппаратных механизмов ограничения нежелательных путей доступа ядра к данным в пространстве пользователя;
- Добавлен код для блокирования атак класса MDS (Microarchitectural Data Sampling) в процессорах Intel. Проверить подверженность системы уязвимости можно через SysFS-переменную "/sys/devices/system/cpu/vulnerabilities/mds". Доступно два режима защиты: полный, требующий наличия обновлённого микрокода, и обходной, который полностью не гарантирует очистку буферов CPU при передаче управления в пространство пользователя или гостевой системе. Для управления режимами защиты в ядро добавлен параметр "mds=", который может принимать значения "full", "full,nosmt" (+ отключение Hyper-Threads) и "off";
- На системах x86-64 для IRQ, механизмов отладки и обработчиков исключений добавлена защита "stack guard-page", суть которой в подстановке на границе со стеком страниц памяти, обращение к которым приводит к генерации исключения (page-fault);
- Добавдена sysctl-настройка vm.unprivileged_userfaultfd, управляющая возможностью использования системного вызова userfaultfd() непривилегированными процессами;
- Сетевая подсистема
- Добавлена поддержка шлюзов IPv6 для маршрутов IPv4. Например, теперь можно указывать правила маршрутизации вида "ip ro add 172.16.1.0/24 via inet6 2001:db8::1 dev eth0";
- Для ICMPv6 реализованы ioctl-вызовы icmp_echo_ignore_anycast и icmp_echo_ignore_multicast для игнорирования ICMP ECHO для anycast и
multicast адресов. Добавлена возможность ограничения интенсивности обработки пакетов ICMPv6;
- Для mesh-протокола B.A.T.M.A.N. ("Better Approach To Mobile Adhoc Networking), позволяющего создавать децентрализованные сети, каждый узел в которых связан через соседние узлы, добавлена поддержка трансляции из multicast в unicast, а также возможность управления через sysfs;
- В ethtool добавлен новый параметр Fast Link Down, позволяющий сократить время поступления информации о событии отключения линка для 1000BaseT (в обычных условиях задержка составляет до 750ms);
- Появилась возможность привязки туннелей Foo-Over-UDP к определённому адресу, сетевому интерфейсу или сокету (ранее привязка производилась только по общей маске);
- В беспроводном стеке обеспечена возможность реализации обработчиков
OWE (Opportunistic Wireless Encryption) в пространстве пользователя;
- В Netfilter в цепочки nat добавлена поддержка семейства адресов inet (например, теперь можно использовать одно правило трансляции для обработки ipv4 и ipv6, без разделения правил для ipv4 и ipv6);
- В netlink добавлен режим strict для жёсткой проверки корректности всех сообщений и атрибутов, в котором не допускается превышение ожидаемого размера атрибутов и запрещено добавление добавочных данных в конце сообщений;
- Память и системные сервисы
- В системный вызов clone() добавлен флаг CLONE_PIDFD, при указании которого родительскому процессу возвращается файловых дескриптор "pidfd", отождествлённый с созданным дочерним процессом. Данный файловый дескриптор, например, можно использовать для отправки сигналов без опасения столкнуться с состоянием гонки (сразу после отправки сигнала целевой PID может быть освобождён из-за завершения работы процесса и занят другим процессом);
- Для второй версии cgroups добавлена функциональность контроллера freezer, при помощи которого можно остановить работу в cgroup и временно высвободить некоторые ресурсы (CPU, ввод/вывод и потенциально даже память) для выполнения других задач. Управление производится через управляющие файлы cgroup.freeze и cgroup.events в дереве cgroup. Запись 1 в cgroup.freeze замораживает процессы в текущем cgroup и всех дочерних группах. Так как заморозка требует некоторого времени, дополнительно предложен файл cgroup.events через который можно узнать о завершении операции;
- Обеспечен экспорт атрибутов памяти, прикреплённой к каждому узлу в sysfs, что позволяет из пространства пользователя определить характер обработки банков памяти в системах с гетерогенной памятью;
- Доработана подсистема PSI (Pressure Stall Information), которая позволяет проанализировать информацию о времени ожидания получения различных ресурсов (CPU, память, ввод/вывод) для определённых задач или наборов процессов в cgroup. При помощи PSI обработчики в пространстве пользователя могут более точно оценить уровень загруженности системы и характер замедления работы, по сравнению с Load Average. В новой версии обеспечена поддержка настройки порогов чувствительности и возможность использовать вызов poll() для получения уведомления о срабатывании установленных пороговых значений за определённый промежуток времени. Данная возможность позволяет организовать в Android отслеживание нехватки памяти на ранней стадии, определять источник проблем и завершать неважные приложения, не доводя до появления заметных пользователю проблем. При стресс-тестировании средства мониторинга потребления памяти на основе PSI продемонстрировали с 10 раз меньше ложных срабатываний по сравнению со статистикой vmpressure;
- Проведена оптимизация кода для проверки BPF-программ, который для больших программ стал выполнять проверку до 20 раз быстрее. Оптимизация позволила поднять лимит на размер BPF-программ с 4096 до миллиона инструкций;
- Для BPF-программ предоставлена возможность доступа к глобальных данным, что позволяет определять в программах глобальные переменные и константы;
- Добавлен API, позволяющий контролировать из BPF-программ изменения параметров sysctl;
- Для архитектуры MIPS32 реализован JIT-компилятор для виртуальной машины eBPF;
- Для 32-разрядной архитектуры PowerPC добавлена поддержка отладочного инструмента KASan (Kernel address sanitizer), обеспечивающего выявление ошибок при работе с памятью;
- На системах x86-64 снято ограничение по размещению дампов состояния при крахе ядра (crash-dump) в областях памяти выше 896MB;
- Для архитектуры s390 реализована поддержка рандомизации адресного пространства ядра (KASLR) и возможность верификации цифровых подписей при загрузке ядра через kexec_file_load();
- Для архитектуры PA-RISC добавлена поддержка отладчика ядра (KGDB), меток перехода и kprobes;
- Оборудование
- В состав включён драйвер Lima для GPU Mali 400/450, применяемого во многих старых чипах на основе архитектуры ARM. Для более новых GPU Mali добавлен драйвер Panfrost, поддерживающий чипы на базе микроархитектур Midgard (Mali-T6xx, Mali-T7xx, Mali-T8xx) и Bifrost (Mali G3x, G5x, G7x);
- Добавлена поддержка звуковых устройств, использующих открытые прошивки Sound Open Firmware ( SOF). Несмотря на наличие открытых драйверов, код прошивок для звуковых чипов до сих пор оставался закрытым и поставлялся в бинарном виде. Проект Sound Open Firmware разработан компанией Intel для создания открытых прошивок для DSP-чипов, связанных с обработкой звука (позднее к разработке также подключился Google). В настоящее время в рамках проекта уже подготовлены открытие прошивки для звуковых чипов платформ Intel Baytrail, CherryTrail, Broadwell, ApolloLake, GeminiLake, CannonLake и IceLake;
- В DRM-драйвере Intel (i915) добавлена поддержка чипов
Elkhartlake (Gen11). Добавлены PCI-идентификаторы для чипов Comet Lake (Gen9). Стабилизирована поддержка чипов Icelake, для которых также добавлены дополнительные PCI-идентификаторы устройств. Включён режим асинхронного переключения между двумя буферами в видеопамяти (async flip) при выполнении операций записи через mmio, что позволило заметно поднять производительность некоторых 3D-приложений (например, производительность в тесте 3DMark Ice Storm увеличилась на 300-400%). Добавлена поддержка технологии HDCP2.2 (High-bandwidth Digital Content Protection) для шифрования видеосигнала, передаваемого через HDMI;
- В драйвер amdgpu для GPU Vega20 добавлена поддержка RAS (Reliability, Availability, Serviceability) и экспериментальная поддержка подсистемы SMU 11, пришедшей на смену технологии Powerplay. Для GPU Vega12 добавлена поддержка режима BACO (Bus Active, Chip Off). Добавлена начальная поддержка XGMI, высокоскоростной шины (PCIe 4.0) для соединения GPU. В драйвер amdkfd добавлены недостающие идентификаторы карт на базе GPU Polaris10;
- В драйвер Nouveau добавлена поддержка плат на основе чипсета NVIDIA Turing 117 (TU117, используется в GeForce GTX 1650). В
kconfig добавлена настройка для отключения устаревших функций, которые уже не применяются в актуальных выпусках libdrm;
- В API DRM и драйвер amdgpu добавлена поддержка объектов синхронизации "timeline", позволяющих обойтись без классических блокировок.
- Из ветки staging в основной состав перенесён драйвер vboxvideo для виртуального GPU VirtualBox;
- Добавлен драйвер aspeed для GFX чипа SoC ASPEED;
- Добавлена поддержка ARM SoC и плат Intel Agilex (SoCFPGA), NXP i.MX8MM, Allwinner (RerVision H3-DVK (H3), Oceanic 5205 5inMFD, ,Beelink GS2 (H6), Orange Pi 3 (H6)), Rockchip (Orange Pi RK3399, Nanopi NEO4, Veyron-Mighty Chromebook), Amlogic: SEI Robotics SEI510,
ST Micro (stm32mp157a, stm32mp157c), NXP ( Eckelmann ci4x10 (i.MX6DL),
i.MX8MM EVK (i.MX8MM),
ZII i.MX7 RPU2 (i.MX7),
ZII SPB4 (VF610),
Zii Ultra (i.MX8M),
TQ TQMa7S (i.MX7Solo),
TQ TQMa7D (i.MX7Dual),
Kobo Aura (i.MX50),
Menlosystems M53 (i.MX53)), NVIDIA Jetson Nano (Tegra T210).
Одновременно Латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 5.2 - Linux-libre 5.2-gnu (Архивная копия от 2 ноября 2019 на Wayback Machine), очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске включена загрузка файлов Sound Open Firmware. Отключена загрузка блобов в драйверах mt7615, rtw88, rtw8822b, rtw8822c, btmtksdio, iqs5xx, ishtp и ucsi_ccg. Обновлён код чистки блобов в драйверах и подсистемах ixp4xx, imx-sdma, amdgpu, nouveau и goya, а также в документации к микрокоду. Прекращена чистка блобов в драйвере r8822be из-за его удаления.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.