Вышло новое ядро Linux 6.10

После двух месяцев интенсивной разработки Линус Торвальдс объявил о выпуске ядра Linux 6.10. Среди ключевых нововведений стоит отметить:

После двух месяцев интенсивной разработки Линус Торвальдс объявил о выпуске ядра Linux 6.10. Среди ключевых нововведений стоит отметить:

Драйвер ntsync с примитивами синхронизации Windows NT.

Компоненты DRM Panic для реализации аналога “синего экрана смерти”.

– Прекращение поддержки старых процессоров Alpha.

Верификация целостности файловой системы на базе FUSE.

– Ограничение доступа к ioctl через механизм Landlock.

– Подсистема для профилирования операций выделения памяти.

– Новый системный вызов mseal().

– Возможность шифрованного обмена данными с устройствами TPM.

– Поддержка высокоприоритетных рабочих очередей в dm-crypt.

– Драйвер panthor для десятого поколения GPU Mali.

– В новой версии было принято 14,564 исправления от 1,989 разработчиков, размер патча составил 41 МБ (изменения затронули 12,509 файлов, добавлено 547,663 строки кода и удалено 312,464 строки). Для сравнения, в предыдущем выпуске было 15,680 исправлений от 2,106 разработчиков, размер патча был 54 МБ.

Около 41% всех изменений в версии 6.10 связаны с драйверами устройств, примерно 15% относятся к обновлению кода для различных аппаратных архитектур, 13% – к сетевому стеку, 5% – к файловым системам и 4% – к внутренним подсистемам ядра.

Дисковая подсистема, ввод/вывод и файловые системы

Добавлена новая операция fcntl, F_DUPFD_QUERY, которая позволяет процессу определить, ссылаются ли два разных файловых дескриптора на один и тот же файл. В отличие от аналогичных возможностей, предоставляемых системным вызовом kcmp(), F_DUPFD_QUERY не раскрывает лишней информации и работает на системах с отключённым kcmp().

В подсистеме FUSE, используемой для реализации файловых систем в пространстве пользователя, добавлена поддержка механизма fs-verity для проверки целостности и подлинности файлов.

В модуль dm-crypt, предназначенный для шифрования блочных устройств, добавлена опция high_priority, которая позволяет использовать высокоприоритетные рабочие очереди для повышения производительности на мощных серверах. По умолчанию эта опция отключена, так как на обычных ПК она может увеличить задержки при выполнении операций, не связанных с шифрованием, таких как обработка звука.

Добавлен новый протокол на основе netlink для управления NFS-сервером в ядре, и создана утилита nfsdctl для работы с этим протоколом. Поддержка монтирования NFS v2 отключена по умолчанию, так как в утилите mount.nfs поддержка NFS v2 была прекращена ещё в 2021 году.

В файловой системе XFS продолжается работа над реализацией возможности использования утилиты fsck для проверки и исправления проблем в online-режиме, без отмонтирования файловой системы. Добавлен ioctl XFS_IOC_EXCHANGE_RANGE для атомарного обмена байтовыми диапазонами между двумя файлами.

В Btrfs реализована поддержка урезания незакреплённых карт экстентов, что может помочь сократить потребление памяти в условиях её нехватки. Код для сжатия данных и функция put_file_data() переведены на использование фолиантов страниц памяти (page folios). Переработан механизм блокировки экстентов при выполнении операций обратной записи.

В файловой системе Ext4 добавлена поддержка ioctl FS_IOC_GETFSSYSFSPATH для определения местоположения заданной примонтированной файловой системы в иерархии /sys/fs.

Файловые системы OPENPROMFS, ISOFS, QNX6, NILFS2, MINIX и FREEVXFS переведены на использование нового API монтирования разделов.

В файловой системе EROFS (Extendable Read-Only File System), предназначенной для использования на разделах, доступных только для чтения, добавлена поддержка алгоритма сжатия Zstandard.

В Bcachefs проведена подготовка к выполнению fsck без отмонтирования раздела (online-проверка). Внесены изменения и исправления для повышения надёжности работы. Реализована возможность обновления и отката формата файловой системы в режиме “nochanges”, при котором запись отключена, и метаданные хранятся только в памяти.

В файловую систему OverlayFS добавлена поддержка создания временных файлов с использованием опции O_TMPFILE.

Прекращена поддержка механизма ограничения пропускной способности блочных устройств CONFIG_BLK_DEV_THROTTLING_LOW, который с 2017 года имел статус экспериментального, не получил широкого применения и затруднял сопровождение подсистемы блочных устройств.

Память и системные сервисы

Добавлен начальный вариант драйвера ntsync, который реализует символьное устройство

  • Добавлена подсистема для профилирования операций выделения памяти в ядре Linux, позволяющая выявлять утечки памяти в ядре и упрощающая проведение оптимизаций потребления памяти. Подсистема обеспечивает низкие накладные расходы, что позволяет использовать её не только в отладочных сборках ядра, но на рабочих системах.
  • Добавлена начальная реализация обработчика аварийных ситуаций в ядре – DRM Panic, использующего подсистему DRM (Direct Rendering Manager) для отображения наглядного цветного отчёта в стиле “синего экрана смерти”. В следующем выпуске планируется добавить возможность показа логотипа и QR-кода на экране при возникновении аварийного состояния.
  • Продолжен перенос изменений из ветки Rust-for-Linux, связанных с использованием языка Rust в качестве второго языка для разработки драйверов и модулей ядра (поддержка Rust не активна по умолчанию, и не приводит ко включению Rust в число обязательных сборочных зависимостей к ядру). Осуществлён переход на использование выпуска Rust 1.78, позволивший переключиться на использование штатной библиотеки alloc, вместо собственного ответвления. Добавлены абстракции для работы со временем в ядре (обвязка над структурой ktime_t). Добавлена поддержка использования компонентов ядра на языке Rust на системах с архитектурой RISC-V.
  • В BPF-программах реализована возможность использования очередей ожидания (wait queue) в ядре. Добавлены функции bpf_preempt_disable и bpf_preempt_enable, позволяющие создавать не прерываемые планировщиком задач секции с кодом. Предоставлена возможность доступа BPF-программ к криптографическим функциям ядра (crypto). Реализована поддержка JIT-компиляции BPF-программ на системах с 32-разрядными процессорами ARCv2.
  • Для 32-разрядных систем ARM реализована поддержка сборки ядра компилятором Clang с включённым режимом защиты CFI (Control Flow Integrity), блокирующим нарушения нормального порядка выполнения (control flow) в результате применения эксплоитов, изменяющих хранимые в памяти указатели на функции.
  • Добавлена возможность прямого отражения через mmap() кольцевых буферов трассировки для передачи их содержимого в пространство пользователя без дополнительного копирования.
  • Добавлен системный вызов “mseal”, позволяющий процессам выставлять блокировку на изменение определённых частей своего адресного пространства. На практике новый системный вызов планируется использоваться в браузере Chrome для усиления sandbox-изоляции.
  • Для субархитектуры x32, которая предоставляет гибридный x86_64 ABI, позволяющий использовать на 64-разрядных системах 32-разрядную модель адресации памяти (процессор работает в 64-разрядном режиме, но использует 32-разрядные указатели и арифметические операции), добавлена поддержка механизма Shadow Stack, который позволяет блокировать работу многих эксплоитов, используя аппаратные возможности процессоров Intel для защиты от перезаписи адреса возврата из функции в случае переполнения буфера в стеке.
  • На системах с архитектурой ARM64 в системном вызове userfaultfd(), дающем возможность создавать обработчики обращений к невыделенным страницам памяти (page faults) в пространстве пользователя, реализованы возможности, связанные с защитой от записи областей памяти и элементов таблицы страниц памяти.
  • Удалён код для поддержки выпускаемых с 1995 года процессоров Alpha 21164 (EV5) и более ранних серий. Сопровождение кода для данных процессоров было усложнено из-за отсутствия в них возможности доступа к памяти на уровне отдельных байтов. Alpha была первой архитектурой, на которой было портировано ядро Linux, изначально доступное только для систем x86.
+1
0
+1
0
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *