Релиз на ядрото на Linux 6.2

След два месеца разработка, Линус Торвалдс представи изданието на ядрото Linux 6.2. Сред най-забележителните промени: разрешен прием на код под лицензията Copyleft-Next, подобрена реализация на RAID5/6 в Btrfs, продължена интеграция на поддръжка за езика Rust, намалени разходи при защита от атаки Retbleed, добавена възможност за регулиране на потреблението на памет при обратно записване, за TCP добавен механизъм за балансировка PLB (Protective Load Balancing), добавен хибриден механизъм за защита на потока изпълнение на команди (FineIBT), в BPF добавена възможност за определяне на собствени обекти и структури от данни, включена е утилита rv (Runtime Verification), намалено е енергопотреблението в реализацията на блокировки RCU.

В новата версия са направени 16843 поправки от 2178 разработчици, размерът на пача е 62 MB (промените засягат 14108 файла, добавени са 730195 реда код, изтрити са 409485 реда). Около 42% от всички представени в 6.2 промени са свързани с драйверите на устройствата, около 16% от промените са относно обновяване на код, специфичен за хардуерни архитектури, 12% са свързани с мрежовия стек, 4% - с файловите системи и 3% - с вътрешните подсистеми на ядрото.

Основните нововъведения в ядрото 6.2:

  • Памет и системни услуги
    • Разрешено е включването в състава на ядрото на код и промени, предоставяни под лицензията Copyleft-Next 0.3.1. Лицензията Copyleft-Next е създадена от един от авторите на GPLv3 и е напълно съвместима с лицензията GPLv2, което е потвърдено от юристите на компаниите SUSE и Red Hat. В сравнение с GPLv2, лицензията Copyleft-Next е значително по-компактна и по-лесна за разбиране (въведението и споменаването на остарели компромиси са премахнати), определя сроковете и реда за отстраняване на нарушения, автоматично премахва изискванията за копилефт за остарели версии, които са над 15 години.

      Copyleft-Next също така съдържа точка за предоставяне на права върху патентовани технологии, което, в отличие от GPLv2, прави тази лицензия съвместима с лицензията Apache 2.0. За да се осигури пълна съвместимост с GPLv2, в текста на Copyleft-Next изрично е посочено, че производната работа може да бъде предоставяна не само под оригиналната лицензия Copyleft-Next, но и под лицензия GPL.

    • В състава е включен инструмент "rv", предоставящ интерфейс за взаимодействие от потребителското пространство с обработчиците на подсистемата RV (Runtime Verification), предназначена за проверка на коректността на работа в системи с висока надеждност, гарантираща отсъствие на сривове. Проверката се извършва по време на изпълнение чрез свързване на обработчици към точки за трасировка, сравняващи фактическия ход на изпълнението с предварително определена референтна детерминирана модел на автомата, определяща очакваното поведение на системата.
    • В устройството zRAM, позволяващо съхраняване на дял за размяна в паметта в компресирана форма (в паметта се създава блочно устройство, на което се извършва свопинг с компресия), е реализирана възможността за повторно опаковане на страниците с използване на алтернативен алгоритъм за постигане на по-високо ниво на компресия. Основната идея е да се предостави избор между няколко алгоритма (lzo, lzo-rle, lz4, lz4hc, zstd), предлагащи свои компромиси между скоростта на компресия/разпаковане и нивото на компресия или оптимални в особени ситуации (например, за компресиране на големи страници памет).
    • Добавен е API "iommufd" за управление от потребителското пространство на системата за управление на паметта за вход-изход — IOMMU (I/O Memory-Management Unit). Новият API позволява управление на таблиците за страниците на паметта за вход/изход, използвайки файлови дескриптори.
    • В BPF е предоставена възможност за създаване на типове, дефиниране на собствени обекти, изграждане на своя иерархия от обекти и гъвкаво формиране на собствени структури от данни, като свързани списъци. За програмите BPF, преминаващи в режим на сън (BPF_F_SLEEPABLE), е добавена поддръжка на блокировки bpf_rcu_read_{,un}lock(). Реализирана е поддръжка за съхранение на обекти task_struct. Добавен е тип карта BPF_MAP_TYPE_CGRP_STORAGE, предоставящ локално хранилище за cgroups.
    • За механизма за блокировки RCU (Read-copy-update) е реализиран опционален механизъм за "лениви" callback-визов, в който по таймер на пакетен режим наведнъж се обработват няколко callback-визова. Прилагането на предложената оптимизация позволява да се намали потреблението на енергия с 5-10% на устройства с Android и ChromeOS чрез отлагане на RCU-заявките по време на простоя или при ниско натоварване на системата.
    • Добавен е sysctl split_lock_mitigate за управление на реакцията на системата при откриване на раздвоени заключвания („split lock“), които възникват при достъп до неравномерно подредени данни в паметта, поради факта, че при изпълнение на атомарна инструкция данните пресичат две линии кеш на CPU. Подобни заключвания водят до значително намаляване на производителността. При задаване на значение 0 в split_lock_mitigate се извежда само предупреждение за наличие на проблема, а при задаване на значение 1, освен предупреждението, се забавя изпълнението на процеса, предизвикал заключването, за да се запази производителността на останалата част от системата.
    • За архитектурата PowerPC е предложена нова реализация на заключванията qspinlock, която демонстрира по-висока производителност и решава някои проблеми с заключванията, възникващи в изключителни случаи.
    • Преработен е кодът за обработка на прекъсвания MSI (Message-Signaled Interrupts), в който са отстранени натрупаните архитектурни проблеми и е добавена поддръжка за свързване на отделни обработвачи с различни устройства.
    • За системи, базирани на архитектурата LoongArch, използвана в процесорите Loongson 3 5000 и реализираща нов RISC ISA, сходен с MIPS и RISC-V, е реализирана поддръжка за ftrace, защита на стека, спящ и чакащ режим.
    • Предоставена е възможност за назначаване на имена на области от споделена анонимна памет (по-рано имената можеха да се назначават само на частна анонимна памет, свързана с конкретен процес).
    • Добавен е нов параметър на командния ред на ядрото „trace_trigger“, предназначен за активиране на триггер за трасировка, използван за свързване на условни команди, които се извикват при задействане на контролна проверка (например, trace_trigger="sched_switch.stacktrace if prev_state == 2").
    • Повишени са изискванията за версията на пакета binutils. За компилиране на ядрото сега е необходим минимум binutils 2.25.
    • При извикване на exec() е добавена възможността за поставяне на процеса в пространство от имена на времето (time namespace), в което времето е различно от системното.
    • Започна прехвърлянето на допълнителната функционалност от клон Rust-for-Linux, свързана с използването на езика Rust като втори език за разработка на драйвери и модули в ядрото. Поддръжката на Rust не е активирана по подразбиране и не води до включване на Rust в задължителните зависимости при компилацията на ядрото. Предложената в предишното издание основна функционалност е разширена с възможности за поддръжка на нискоуровневия код, като тип Vec и макроси pr_debug!(), pr_cont!() и pr_alert!(), както и процедурен макрос „#[vtable]“, който улеснява работата с таблици на указатели на функции. Очаква се добавянето на високостоен Rust обвивки над подсистемите на ядрото, които ще позволят създаването на пълноценни драйвери на Rust в следващите издания.
    • Типът „char“, използван в ядрото, сега по подразбиране е обявен за беззнаков за всички архитектури.
    • Механизмът за разпределение на паметта slab — SLOB (slab allocator), който е проектиран за системи с малък обем памет, е обявен за остарял. Вместо SLOB в обичайни условия се препоръчва да се използва SLUB или SLAB. За системи с малък обем памет е препоръчително да се прилага SLUB в режим SLUB_TINY.
  • Дисковата подсистема, вход/изход и файловите системи
    • В Btrfs са направени подобрения, насочени към решаване на проблема с "write hole" в реализацията на RAID 5/6 (опит за възстановяване на RAID, ако провалът е настъпил по време на запис и не е възможно да се определи кой блок на кое от устройствата RAID е записан коректно, което може да доведе до разрушаване на блокове, съответстващи на недозаписаните блокове). Освен това, за SSD сега по подразбиране автоматично се активира асинхронното изпълнение на операцията „discard“, позволяващо постигане на по-висока производителност благодарение на ефективната групировка на операциите „discard“ в опашката и обработката на опашката от фонов обработчик. Подобрена е производителността на операциите send и lseek, както и ioctl FIEMAP.
    • Разширени са възможностите за управление на отложената запис (writeback, фоново запазване на променените данни) за блочни устройства. В определени ситуации, например при използване на мрежови блочни устройства или USB памети, отложената запис може да доведе до голямо потребление на оперативна памет. За управление на поведението на отложената запис и за поддържане на размерите на страницния кеш в определени граници в sysfs (\/sys\/class\/bdi\/) са предложени новите параметри strict_limit, min_bytes, max_bytes, min_ratio_fine и max_ratio_fine.
    • В файловата система F2FS е реализирана ioctl операция за атомна замяна, която позволява запис на данни в файл в рамките на една атомна операция. В F2FS също така е добавен блочен кеш на екстентите, който помага за идентифициране на активно използваните данни или данните, до които отдавна не е имало достъп.
    • В файловата система ext4 е извършено само коригиране на грешки.
    • В файловата система ntfs3 са предложени няколко нови опции за монтиране: „nocase“ за управление на чувствителността на регистъра на символите в имената на файлове и директории; windows_name за забрана за създаване на имена на файлове, съдържащи символи, недопустими за ОС Windows; hide_dot_files за управление на назначаването на етикет на скритите файлове за файлове, започващи с точка.
    • В файловата система Squashfs е реализирана опция за монтиране „threads=“, чрез която може да бъде определен брой потоци за паралелизиране на операциите по разархивиране. В Squashfs също така е добавена възможност за мапинг на идентификаторите на потребителите на монтираните файлови системи, което е приложимо за съпоставяне на файлове на определен потребител на монтирания чужд дял с друг потребител в текущата система.
    • Преработена е реализацията на списъците за контрол на достъпа POSIX (POSIX ACL). В новата реализация са премахнати архитектурните проблеми, опростено е поддържането на кодовата база и са използвани по-сигурни типове данни.
    • В подистемата fscrypt, която се използва за прозрачно криптиране на файлове и директории, е добавена поддръжка на алгоритъм за криптиране SM4 (китайски стандарт GB\/T 32907-2016).
    • Предоставена е възможност за компилиране на ядрото без поддръжка на NFSv2 (в бъдеще поддръжката на NFSv2 планират напълно да бъде прекратена).
    • Променена е организацията за проверка на права за достъп до NVMe устройства. Възможно е четене и запис на NVMe устройство, ако процесът на запис има достъп до специален файл на устройството (по-рано процесът трябваше да има правото CAP_SYS_ADMIN).
    • Пакетният драйвер за CD/DVD, който беше обявен за остарял през 2016 година, е премахнат.
  • Виртуализация и сигурност
    • Внедрен е нов метод за защита срещу уязвимостта Retbleed в процесорите Intel и AMD, използващ проследяване на дълбочината на повикванията, което забавя работата по-малко в сравнение с предишната защита срещу Retbleed. Предложен е параметър за командния ред на ядрото "retbleed=stuff" за активиране на новия режим.
    • Добавен е хибриден механизъм за защита на потока на изпълнение на команди FineIBT, комбиниращ прилагането на хардуерни инструкции Intel IBT (Indirect Branch Tracking) и софтуерна защита kCFI (kernel Control Flow Integrity) за блокиране на нарушения на нормалния ред на изпълнение в резултат на прилагането на експлоити, променящи съхраняваните в паметта указатели на функции. FineIBT позволява изпълнението чрез косвен преход само в случай на преход към инструкция ENDBR, която се поставя в самото начало на функцията. Допълнително, по аналогия с механизма kCFI, след това следва проверка на хешове, гарантиращи неизменността на указателите.
    • Добавени са ограничения за блокиране на атаки, манипулиращи генерирането на състояния "oops", след които проблемните задачи се завършват и състоянието се възстановява без спиране на работата на системата. При много голямо число повиквания на състоянието "oops" възниква препълване на брояча на референциите (refcount), което позволява експлоатация на уязвимости, причинени от разыменоване на NULL указатели. За защита срещу подобни атаки в ядрото е добавен лимит на максималния брой на сработванията на "oops", след преодоляването на който ядрото ще инициира преход към състояние "panic" с последващо перезареждане, което няма да позволи достигането на необходимия брой итерации за препълване на refcount. По подразбиране лимитът е зададен на 10 хиляди "oops", но при желание може да бъде променен чрез параметъра oops_limit.
    • Добавен е параметър за конфигурация LEGACY_TIOCSTI и sysctl legacy_tiocsti за изключване на възможността за въвеждане на данни в терминала чрез ioctl TIOCSTI, тъй като тази функционалност може да се използва за замяна на произволни символи в буфера за въвеждане на терминала и симулация на потребителски вход.
    • Предложен е нов тип вътрешни структури encoded_page, в който долните битове на указателя се използват за съхраняване на допълнителна информация, предназначена за защита от случайно разименуване на указателя (при истинска необходимост от разименуване, тези допълнителни битове трябва първо да се изчистят).
    • На платформата ARM64, по време на зареждането, е предоставена възможност за включване и изключване на софтуерната реализация на механизма Shadow Stack, който се използва за защита срещу презаписване на адреса на връщане от функцията в случай на преливане на буфер в стека (същността на защитата е в съхраняването на адреса на връщане в отделен „теневи“ стек след предаване на управлението на функцията и извличането на този адрес преди изхода от функцията). Поддръжката на хардуерната и софтуерната реализация на Shadow Stack в една и съща версия на ядрото позволява използването на едно ядро на различни ARM системи, независимо от поддръжката на инструкции за удостоверяване на указатели. Включването на софтуерната реализация се осъществява чрез подмяна на необходимите инструкции в кода по време на зареждане.
    • Добавена е поддръжка за използването на механизмите за асинхронно уведомяване за изход (asynchronous exit notification) на процесорите Intel, което позволява откритие на атаки с единична стъпка върху код, изпълняван в анклавах SGX.
    • Предложен е набор от операции, позволяващи на хипервизора да поддържа заявки от гост-системи Intel TDX (Trusted Domain Extensions).
    • Премахнати са настройки за компилация на ядрото RANDOM_TRUST_BOOTLOADER и RANDOM_TRUST_CPU, вместо които трябва да се използват съответните опции на командния ред random.trust_bootloader и random.trust_cpu.
    • В механизма Landlock, който позволява ограничаване на взаимодействието на група процеси с външната среда, е добавена поддръжка за флага LANDLOCK_ACCESS_FS_TRUNCATE, който дава възможност за контрол на изпълнението на операции по усечение на файлове.
  • Мрежова подсистема
    • Добавена е поддръжка за PLB (Protective Load Balancing) за IPv6, механизъм за разпределение на натоварването между мрежовите връзки, насочен към намаляване на точките на пренаселване на комутаторите в дата центровете. Чрез промяна на IPv6 Flow Label, PLB случайно променя пътищата на пакетите, за да балансира натоварването на портовете на комутатора. За да се намали произволността в подреждането на пакетите, операцията се извършва при възможност след периоди на простой (idle). Приложението на PLB в дата центровете на Google е намалило дисбаланса в натоварването на портовете на комутаторите средно с 60%, намалило е загубите на пакети с 33% и е понижило забавянията с 20%.
    • Добавен е драйвер за устройства MediaTek с поддръжка на Wi-Fi 7 (802.11be).
    • Добавена е поддръжка за 800-гигабитови връзки.
    • Добавена е възможност за преименуване на мрежовите интерфейси в движение, без спиране на работата.
    • В логовите съобщения за SYN-флуд е добавено упоменаване на IP-адреса, на който е получен пакетът.
    • За UDP е реализирана възможност за използване на отделни хеш-таблици за различни мрежови пространства с имена.
    • За мрежовите мостове е реализирана поддръжка на метода за удостоверяване MAB (MAC Authentication Bypass).
    • За протокола CAN (CAN_RAW) е реализирана поддръжка на режима на сокетите SO_MARK за прикрепване на филтри за трафик на база fwmark.
    • В ipset е реализиран нов параметър bitmask, който позволява задаване на маска на основата на произволни битове в IP-адреса (например, „ipset create set1 hash:ip bitmask 255.128.255.0“).
    • В nf_tables е добавена поддръжка за обработка на вътрешни (inner) заглавки, идващи в тунелираните пакети.
  • Оборудване
    • Добавена е подсистема „accel“ с реализация на рамка за ускорители на изчисления, които могат да бъдат предоставяни както под формата на отделни ASIC, така и като IP-блокове в SoC и GPU. Основно такива ускорители са насочени към ускоряване на решения за задачи в машинното обучение.
    • В драйвера amdgpu е включена поддръжка на IP-компоненти GC, PSP, SMU и NBIO. За системи ARM64 е реализирана поддръжка на DCN (Display Core Next). Реализацията на защитеното изходно изображение е преместена от използването на DCN10 на DCN21 и вече може да бъде използвана при свързването на множество екрани.
    • В драйвера i915 (Intel) е стабилизирана поддръжката на дискретни видео карти Intel Arc (DG2/Alchemist).
    • В драйвера Nouveau е реализирана поддръжка на GPU NVIDIA GA102 (RTX 30) на базата на архитектурата Ampere. За карти nva3 (GT215) е добавена възможност за управление на фоновото осветление.
    • Добавена е поддръжка за безжични адаптери, базирани на чипове Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) и MediaTek MT7996, Bluetooth интерфейси Broadcom BCM4377/4378/4387, а също така и за Ethernet контролери Motorcomm yt8521, NVIDIA Tegra GE.
    • Добавена е поддръжка за ASoC (ALSA System on Chip) за вградени звукови чипове HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. Добавена е поддръжка за звуковия интерфейс Focusrite Saffire Pro 40. Добавен е звуковият кодек Realtek RT1318.
    • Добавена е поддръжка за смартфони и таблети Sony (Xperia 10 IV, 5 IV, X и X compact, OnePlus One, 3, 3T и Nord N100, Xiaomi Poco F1 и Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1.
    • Добавена е поддръжка за ARM SoC и платки Apple T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460), SM6375 (Snapdragon 695), SDM670 (Snapdragon 670), MSM8976 (Snapdragon 652), MSM8956 (Snapdragon 650), RK3326 Odroid-Go/rg351, Zyxel NSA310S, InnoComm i.MX8MM, Odroid Go Ultra.

Междувременно Латиноското благотворително дружество за свободен софтуер е разработило версия на напълно свободно ядро 6.2 — Linux-libre 6.2-gnu, почистено от елементи на фърмуер и драйвери, съдържащи несвободни компоненти или фрагменти от код, чиято област на приложение е ограничена от производителя. В новия релиз е извършено почистване на нови блобове в драйвера nouveau. Изключено е зареждането на блобове в драйверите mt7622, mt7996 wifi и bcm4377 bluetooth. Извършено е почистване на имената на блобове в dts файловете за архитектура Aarch64. Обновен е кодът за почистване на блобове в различни драйвери и подсистеми. Прекратено е почистването на драйвера s5k4ecgx, тъй като той е премахнат от ядрото.

Източник: opennet.ru

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster