Реліз ядра Linux 6.10

Після двох місяців розробки Лінус Торвальдс представив реліз ядра Linux 6.10. Серед найбільш помітних змін: драйвер ntsync з примітивами синхронізації Windows NT, компоненти DRM Panic для реалізації аналога «синього екрану смерті», припинення підтримки старих CPU Alpha, можливість верифікації цілісності у ФС на базі FUSE, обмеження доступу до ioctl через механізм Landlock, підсистема для профілювання операцій виділення пам'яті, системний виклик mseal(), можливість шифрованого обміну даними з пристроями dm-crypt, драйвер panthor для десятого покоління GPU Mali.

У нову версію прийнято 14564 виправлень від 1989 розробників, розмір патчу - 41 МБ (зміни торкнулися 12509 файлів, додано 547663 рядків коду, видалено 312464 рядків). У минулому випуску було 15680 2106 виправлень від 54 розробників, розмір патчу - 41 МБ. Близько 6.10% всіх представлених у 15 змін пов'язані з драйверами пристроїв, приблизно 13% змін стосуються оновлення коду, специфічного для апаратних архітектур, 5% пов'язано з мережевим стеком, 4% — з файловими системами і XNUMX% з внутрішніми підсистемами ядра.

Основні нововведення в ядрі 6.10:

  • Дискова підсистема, введення/виведення та файлові системи
    • Додана нова 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 реалізована підтримка урізання (shrinker) незакріплених карт екстентів, що може бути корисним для скорочення споживання пам'яті в умовах нестачі пам'яті в системі. Код стиснення даних та функція 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, що реалізує символьний пристрій /dev/ntsync і набір примітивів для синхронізації, що застосовуються в ядрі Windows NT. Реалізація подібних примітивів на рівні ядра дозволяє суттєво підняти продуктивність Windows-ігор, що запускаються за допомогою Wine. Приріст продуктивності досягається завдяки рятуванню від накладних витрат, пов'язаних із застосуванням RPC у просторі користувача. Створення окремого драйвера для ядра Linux пояснюється проблематичністю коректної реалізації API синхронізації NT поверх існуючих примітивів у ядрі.
    • Додано підсистему для профілювання операцій виділення пам'яті в ядрі 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 дозволяє блокувати роботу багатьох експлоїтів, використовуючи апаратні можливості процесорів Intel захисту від перезапису адреси повернення з функції у разі переповнення буфера в стеку.
    • На системах з архітектурою ARM64 у системному виклику userfaultfd(), що дозволяє створювати обробники звернень до невиділених сторінок пам'яті (page faults) у просторі користувача, реалізовані можливості, пов'язані із захистом від запису областей пам'яті та елементів таблиці сторінок пам'яті.
    • Видалено код для підтримки процесорів Alpha 21164 (EV5) і більш ранніх серій, що випускаються з 1995 року. Супровід коду для даних процесорів було ускладнене через відсутність у них можливості доступу до пам'яті лише на рівні окремих байтів. Alpha була першою архітектурою, де було портовано ядро Linux, спочатку доступне лише для систем x86.
  • Віртуалізація та безпека
    • Додано підтримку шифрованого обміну даними з пристроями TPM (Trusted Platform Module) та перевірки цілісності транзакцій.
    • LSM-модуль Landlock, що дозволяє обмежити взаємодію групи процесів із зовнішнім оточенням, додано можливість застосування правил для обмеження доступу до викликів ioctl().
    • Запропоновано опцію init_mlocked_on_free, що виставляється на етапі завантаження, що забезпечує обнулення вмісту пам'яті, захищеної від витіснення в розділ підкачки за допомогою виклику mlock(), якщо ця пам'ять буде звільнена без розблокування викликом munlock(). Використання даної опції дозволяє виключити осідання криптографічних ключів у пам'яті у разі аварійного завершення програми, що працює з ними.
    • У підсистемі crypto прискорено виконання операцій дискового шифрування з використанням алгоритму AES-XTS на системах x86_64 з процесорами Intel та AMD, що підтримують розширення VAES, AVX2, VPCLMULQDQ, AVX10 або AVX512.
    • Видалено можливість збирання статистики про використання криптопідсистеми ядра (CONFIG_CRYPTO_STATS). Ця можливість не використовувалася на практиці і призводила до значного зниження продуктивності, а також створювала відчутне додаткове навантаження на супроводжуючих.
  • Мережева підсистема
    • Значно підвищено продуктивність операцій відправлення даних як zero-copy під час використання підсистеми io_uring. Додано можливість об'єднання («bundle») кількох буферів для операцій відправлення та прийому даних.
    • Переписаний код складання сміття, який використовується під час надсилання файлових дескрипторів через Unix-сокети з використанням повідомлень SCM_RIGHTS. Зміна дозволяє вирішити проблему із накопиченням зациклених лічильників посилань.
    • Додано можливість встановлення фільтрів для протоколу PFCP (Packet Forwarding Control Protocol), що використовується в мережах 4G та 5G.
    • Додано підтримку опції мережевих сокетів SO_PEEK_OFF, яка за аналогією з такою ж опцією для Unix-сокетів дозволяє визначити зміщення даних у черзі, яке використовується системним викликом recv при вказівці прапора MSG_PEEK (позначає дані непрочитаними і вони будуть знову видані при наступному виклику recv).
    • У підсистему io_uring додано підтримку операції IORING_CQE_F_SOCK_NONEMPTY, що дозволяє визначити у мережевого сокету наявність запитів на з'єднання, що очікують обробки.
    • Запропоновано реалізацію технології PoE (Power over Ethernet), засновану на раніше доступному коді для підтримки PoDL (Power over Data Line) та сумісну з PoE-контролерами Microchip PD692x0 та TI TPS23881.
    • Для протоколів TCP, DCCP і MPTC додано підтримку механізму rstreason, що дозволяє визначати причину відправки RST-пакетів (наприклад, NO_SOCKET).
  • Обладнання
    • До складу включено драйвер panthor для десятого покоління GPU Mali (G310, G510, G710), в якому застосовується технологія CSF (Сommand Stream Frontend), яка виносить на бік прошивки деякі функції драйвера для зниження навантаження на CPU і пропонує нову модель організації виконання робіт на GPU . Зміни для підтримки нового драйвера також прийняті Mesa і включені до складу Gallium-драйвера panfrost для GPU Mali.
    • До драйвера i915 додані PCI-ідентифікатори нових дискретних відеокарт Intel Arc (DG2/Alchemist).
    • Продовжено роботу над drm-драйвером (Direct Rendering Manager) Xe для GPU на базі архітектури Intel Xe, яка використовується у відеокартах Intel сімейства Arc та інтегрованої графіки, починаючи з процесорів Tiger Lake. Додано підтримку CPU Arrow Lake H. Продовжено реалізацію підтримки процесорів Lunar Lake. Додано початкову підтримку механізму SR-IOV (Single Root I/O Virtualization).
    • У драйвері AMDGPU додано підтримку SMU 14.0 (System Management Unit). Додано можливість використання нових GPU AMD на системах із архітектурою RISC-V.
    • Додано драйвер для прискорювача криптографічних операцій Tegra Security Engine, який можна використовувати для прискорення AES та різних алгоритмів хешування.
    • Додано підтримку екранних панелей LG SW43408, Innolux G121XCE-L01 LVDS, RK3326 GameForce Chi, Crystal Clear CMT430B19N00, POWERTIP PH128800T006-ZHC01, Startek KD050HD020 V020, Raydium RM3, BOE NT050WHM-N2, CMN N69380BCA-EA116 та AUO B44XAN116.
    • Додано підтримку звукової підсистеми ноутбуків Lenovo Thinkbook 13x Gen 4, Lenovo Thinkbook 16P Gen 5, Lenovo Thinkbook 13X та ASUS Zenbook 2024 HN7306W. Додана підтримка зовнішніх звукових карток Vocaster One та Vocaster Two. Додано драйвер для підсилювачів NAU8325 від компанії Nuvoton Technology.
    • У драйвер HID-Steam додано підтримку IMU (Inertial Measurement Unit) ігрового контролера Steam Deck, що дозволяє використовувати окремий вузол evdev для доступу до даних гіроскопа та акселерометра.
    • Увімкнено зміни для підтримки ARM SoC Snapdragon X Elite, в якому використовується власний 12-ядерний CPU Qualcomm Oryon та GPU Qualcomm Adreno. Чіп націлений на використання в ноутбуках та ПК, і випереджає у багатьох тестах продуктивності чіпи Apple M3 та Intel Core Ultra 155H.
    • Додана підтримка ARM-плат, SoC та пристроїв: PocketBook 614 Plus, Sony Xperia Z3, Xperia 1V, Samsung Galaxy S5 China, Motorola Moto G, RK3326 GameForce Chi, Anbernic RG35XX (Plus/H/2024), Airoha EN7581CK 3C, ArmSom Sige7, Tanix TX1, Toradex Colibri iMX8DX, Renesas RZ/V2H, Forlinx OK3588-C, Protonic MECSBC, Emcraft Systems NavQ+, NXP S32G3, Wolfvision pf5, Amlogic A4/A5, AS3200 AS5300 ASrock E3C256D4I, IBM system1 BMC, Meta Harma BMC (AST2600), ASRock X570D4U BMC, Au-Zone Maivin AI Vision Starter Kit.
    • Додано підтримку плат Milk-V Mars, що використовують SoC Starfive JH7110 на базі архітектури RISC-V.

Одночасно латиноамериканський Фонд вільного програмного забезпечення сформував варіант повністю вільного ядра 6.10 — Linux-libre 6.10-gnu, очищеного від елементів прошивок та драйверів, що містять невільні компоненти або ділянки коду, сфера застосування яких обмежена виробником. У випуску 6.10 оновлено код чищення блобів у драйверах Intel i915, rtl8xxxu, qla2xxx та QCAI sahara. Проведено чищення імен блобів у dts-файлах (devicetree) для архітектури Aarch64. Очищено від блобів нові файли, додані в драйверах Adreno, Intel IPU3 та PRUEth. Проведено чищення нових драйверів Panthor, Intel IPU6, PRUEth SR1, rtw8703b, tps23881, air_en8811h, Intel ISH HID та pcm6240. Припинено чищення USB-драйвера Prism2.5/3 USB, який було видалено з ядра.

Джерело: opennet.ru

Купити надійний хостинг для сайтів із захистом від DDoS, VPS VDS сервери 🔥 Купити надійний хостинг для сайтів із захистом від DDoS, VPS VDS сервери | ProHoster