Версия на ядрото на Linux 6.2

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

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

Ключови иновации в ядрото 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 изрично посочва, че производна работа може да бъде предоставена под GPL лиценза в допълнение към оригиналния лиценз Copyleft-Next.

    • Структурата включва помощната програма „rv“, която предоставя интерфейс за взаимодействие от потребителското пространство с манипулатори на подсистемата RV (Runtime Verification), предназначена да проверява правилната работа на високонадеждни системи, които гарантират липсата на повреди. Проверката се извършва по време на изпълнение чрез прикачване на манипулатори към точки за проследяване, които проверяват действителния напредък на изпълнение спрямо предварително определен референтен детерминистичен модел на машината, който дефинира очакваното поведение на системата.
    • Устройството zRAM, което позволява суап дялът да се съхранява в паметта в компресиран вид (в паметта се създава блоково устройство, към което се извършва суап с компресия), реализира възможността за преопаковане на страници с помощта на алтернативен алгоритъм за постигане на по-високо ниво на компресия. Основната идея е да се осигури избор между няколко алгоритъма (lzo, lzo-rle, lz4, lz4hc, zstd), предлагащи собствени компромиси между скоростта на компресия/декомпресия и нивото на компресия, или оптимални в специални ситуации (например за компресиране на големи страници с памет).
    • Добавен е API "iommufd" за управление на системата за управление на I/O памет - IOMMU (I/O Memory-Management Unit) от потребителско пространство. Новият API прави възможно управлението на таблици на страници на I/O памет с помощта на файлови дескриптори.
    • BPF предоставя възможност за създаване на типове, дефиниране на ваши собствени обекти, изграждане на ваша собствена йерархия от обекти и гъвкаво създаване на ваши собствени структури от данни, като например свързани списъци. За BPF програми, преминаващи в режим на заспиване (BPF_F_SLEEPABLE), е добавена поддръжка за bpf_rcu_read_{,un}lock() заключвания. Реализирана поддръжка за запазване на обекти task_struct. Добавен тип карта BPF_MAP_TYPE_CGRP_STORAGE, осигуряващ локално съхранение за cgroups.
    • За механизма за блокиране на RCU (Read-copy-update) е внедрен незадължителен механизъм за „мързеливи“ повиквания за обратно извикване, при които няколко извиквания за обратно извикване се обработват наведнъж с помощта на таймер в пакетен режим. Прилагането на предложената оптимизация ни позволява да намалим консумацията на енергия на устройства с Android и ChromeOS с 5-10% чрез отлагане на RCU заявки по време на неактивност или ниско натоварване на системата.
    • Добавен е sysctl split_lock_mitigate, за да контролира как системата реагира, когато открие разделени ключалки, които възникват при достъп до неподравнени данни в паметта поради данните, пресичащи две линии на CPU кеш при изпълнение на атомарна инструкция. Такива блокажи водят до значителен спад в производителността. Задаването на split_lock_mitigate на 0 издава само предупреждение, че има проблем, докато настройването на split_lock_mitigate на 1 също води до забавяне на процеса, който е причинил заключването, за да се запази производителността на останалата част от системата.
    • Предложена е нова реализация на qspinlock за PowerPC архитектурата, която демонстрира по-висока производителност и решава някои проблеми със заключването, които възникват в изключителни случаи.
    • Кодът за обработка на прекъсванията 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() е добавена възможност за поставяне на процес във времево пространство от имена, в което времето се различава от системното време.
    • Започнахме да прехвърляме допълнителна функционалност от клона Rust-for-Linux, свързана с използването на езика Rust като втори език за разработване на драйвери и модули на ядрото. Поддръжката на Rust е деактивирана по подразбиране и не води до включването на Rust като задължителна зависимост за изграждане на ядрото. Основната функционалност, предлагана в последната версия, е разширена, за да поддържа код от ниско ниво, като типа Vec и макросите pr_debug!(), pr_cont!() и pr_alert!(), както и процедурния макрос “#[vtable ]”, което опростява работата с указателни таблици върху функции. Добавянето на обвързвания на високо ниво на Rust над подсистемите на ядрото, което ще позволи създаването на пълноценни драйвери в Rust, се очаква в бъдещите версии.
    • Типът "char", използван в ядрото, вече е обявен за неподписан по подразбиране за всички архитектури.
    • Механизмът за разпределение на паметта на плочата - SLOB (slab allocator), който е проектиран за системи с малък обем памет, е обявен за остарял. Вместо SLOB, при нормални условия се препоръчва използването на SLUB или SLAB. За системи с малък обем памет се препоръчва използването на SLUB в режим SLUB_TINY.
  • Дискова подсистема, I/O и файлови системи
    • Бяха направени подобрения в Btrfs, насочени към коригиране на проблема с „дупката за запис“ в реализациите на RAID 5/6 (опит за възстановяване на RAID, ако възникне срив по време на запис и е невъзможно да се разбере кой блок на кое RAID устройство е записано правилно, което може да доведе до унищожаване на блокове, съответстващи на подписани блокове). В допълнение, SSD вече автоматично активират асинхронна операция за изхвърляне по подразбиране, когато е възможно, позволявайки подобрена производителност поради ефективно групиране на операции за изхвърляне в опашки и обработка на опашката от фонов процесор. Подобрена производителност на операциите за изпращане и lseek, както и на FIEMAP ioctl.
    • Разширени са възможностите за управление на отложено писане (обратно записване, фоново запазване на променени данни) за блокови устройства. В някои ситуации, като например при използване на мрежови блокови устройства или USB устройства, мързеливите записи могат да доведат до голяма консумация на RAM. За да се контролира поведението на мързеливи записи и да се поддържа размерът на кеша на страницата в определени граници, в sysfs (/sys/class/bdi/) са въведени нови параметри strict_limit, min_bytes, max_bytes, min_ratio_fine и max_ratio_fine.
    • Файловата система F2FS реализира операция за атомна замяна на ioctl, която ви позволява да записвате данни във файл в рамките на една атомна операция. F2FS също така добавя кеш на блокови екстенти, за да помогне за идентифициране на активно използвани данни или данни, които не са били достъпвани дълго време.
    • В ext4 FS се отбелязват само корекции на грешки.
    • Файловата система 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 (интегритет на контролния поток на ядрото), за да блокира нарушенията на потока на управление в резултат на използването на експлойти, които модифицират указатели, съхранени в паметта на функции. FineIBT позволява изпълнение чрез индиректен скок само в случай на скок към инструкцията ENDBR, която е поставена в самото начало на функцията. Освен това, по аналогия с механизма kCFI, хешовете след това се проверяват, за да се гарантира неизменността на указателите.
    • Добавени са ограничения за блокиране на атаки, които манипулират генерирането на състояния "oops", след което проблемните задачи се изпълняват и състоянието се възстановява без спиране на системата. При много голям брой извиквания към състоянието "oops" възниква препълване на брояча на препратки (refcount), което позволява експлоатация на уязвимости, причинени от дереференции на NULL указател. За защита срещу подобни атаки към ядрото е добавен лимит за максимален брой тригери „oops“, след превишаването на които ядрото ще инициира преход към състояние „паника“, последвано от рестартиране, което няма да позволи постигането на брой итерации, необходими за препълване на refcount. По подразбиране ограничението е зададено на 10 хиляди „oops“, но при желание може да се промени чрез параметъра oops_limit.
    • Добавен конфигурационен параметър LEGACY_TIOCSTI и sysctl legacy_tiocsti за деактивиране на възможността за въвеждане на данни в терминала с помощта на ioctl TIOCSTI, тъй като тази функционалност може да се използва за заместване на произволни знаци във входния буфер на терминала и симулиране на въвеждане от потребителя.
    • Предложен е нов тип вътрешна структура, encoded_page, в която долните битове на указателя се използват за съхраняване на допълнителна информация, използвана за защита срещу случайно деименуване на указателя (ако деименуването действително е необходимо, тези допълнителни битове трябва първо да бъдат изчистени) .
    • На платформата ARM64, на етапа на зареждане, е възможно да се активира или деактивира софтуерната реализация на механизма Shadow Stack, който се използва за защита срещу презаписване на адреса за връщане от функция в случай на препълване на буфера на стека ( същността на защитата е да запази адреса за връщане в отделен стек „сянка“, след като контролът бъде прехвърлен към функцията и извличане на дадения адрес преди излизане от функцията). Поддръжката на хардуерни и софтуерни реализации на Shadow Stack в едно сглобяване на ядрото ви позволява да използвате едно ядро ​​на различни ARM системи, независимо от тяхната поддръжка за инструкции за удостоверяване на показалец. Включването на софтуерна реализация се осъществява чрез подмяна на необходимите инструкции в кода по време на зареждане.
    • Добавена е поддръжка за използване на асинхронния механизъм за уведомяване за излизане на процесори на Intel, което позволява откриване на атаки в една стъпка на код, изпълняван в SGX анклави.
    • Предлага се набор от операции, които позволяват на хипервайзора да поддържа заявки от системи за гости на Intel TDX (Trusted Domain Extensions).
    • Настройките за изграждане на ядрото RANDOM_TRUST_BOOTLOADER и RANDOM_TRUST_CPU са премахнати в полза на съответните опции на командния ред random.trust_bootloader и random.trust_cpu.
    • Механизмът Landlock, който ви позволява да ограничите взаимодействието на група процеси с външната среда, добави поддръжка за флага LANDLOCK_ACCESS_FS_TRUNCATE, което прави възможно контролирането на изпълнението на операции за съкращаване на файлове.
  • Мрежова подсистема
    • За IPv6 е добавена поддръжка за PLB (защитно балансиране на натоварването), механизъм за балансиране на натоварването между мрежовите връзки, насочен към намаляване на точките на претоварване на комутаторите на центъра за данни. Чрез промяна на етикета на потока на IPv6, PLB произволно променя пътеките на пакетите, за да балансира натоварването на портовете на комутатора. За да се намали пренареждането на пакети, тази операция се извършва след периоди на неактивност, когато е възможно. Използването на PLB в центровете за данни на Google намали дисбаланса на натоварването на портовете на комутатора със средно 60%, намали загубата на пакети с 33% и намали латентността с 20%.
    • Добавен драйвер за устройства MediaTek, поддържащи Wi-Fi 7 (802.11be).
    • Добавена е поддръжка за 800-гигабитови връзки.
    • Добавена е възможност за преименуване на мрежови интерфейси в движение, без спиране на работа.
    • Споменаване на IP адреса, до който е пристигнал пакетът, е добавено към съобщенията в журнала за SYN наводнение.
    • За UDP е въведена възможност за използване на отделни хеш-таблици за различни мрежови пространства от имена.
    • За мрежови мостове е внедрена поддръжка за метода за удостоверяване MAB (MAC Authentication Bypass).
    • За CAN протокола (CAN_RAW) е внедрена поддръжка за режима на сокет SO_MARK за прикачване на филтри за трафик, базирани на fwmark.
    • ipset прилага нов параметър за битова маска, който ви позволява да зададете маска въз основа на произволни битове в IP адреса (например „ipset create set1 hash:ip bitmask 255.128.255.0“).
    • Добавена е поддръжка за обработка на вътрешни заглавки в тунелирани пакети към nf_tables.
  • Оборудование
    • Подсистемата „accel“ е добавена с внедряването на рамка за изчислителни ускорители, които могат да бъдат доставени или под формата на отделни ASIC, или под формата на IP блокове вътре в SoC и GPU. Тези ускорители са насочени главно към ускоряване на решаването на проблеми с машинното обучение.
    • Драйверът amdgpu включва поддръжка за GC, PSP, SMU и NBIO IP компоненти. За системи ARM64 е внедрена поддръжка за DCN (Display Core Next). Внедряването на защитен екранен изход е преместено от използване на DCN10 към DCN21 и вече може да се използва при свързване на множество екрани.
    • Драйверът i915 (Intel) има стабилизирана поддръжка за дискретни видеокарти Intel Arc (DG2/Alchemist).
    • Драйверът Nouveau поддържа графични процесори 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. Зареждането на Blob е деактивирано в драйверите за mt7622, ​​​​mt7996 wifi и bcm4377 bluetooth. Изчистени имена на петна в dts файлове за архитектурата Aarch64. Актуализиран код за почистване на петна в различни драйвери и подсистеми. Спря почистването на драйвера s5k4ecgx, тъй като беше премахнат от ядрото.

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

Добавяне на нов коментар