Po dvoch mesiacoch vývoja Linus Torvalds predstavil vydanie jadra Linux 6.2. Medzi najvýraznejšími zmenami je povolenie prijímania kódu pod licenciou Copyleft-Next, vylepšená implementácia RAID5/6 v Btrfs, pokračovanie integrácie podpory programovacieho jazyka Rust, znížené náklady na ochranu proti útokom Retbleed, pridaná možnosť regulácie spotreby pamäte pri spätnom zápise, pre TCP bol pridaný mechanizmus vyvažovania PLB (Protective Load Balancing), pridaný hybridný mechanizmus ochrany toku vykonávania príkazov (FineIBT), v BPF sa objavila možnosť definovať vlastné objekty a dátové štruktúry, do súpravy bola pridaná utilita rv (Runtime Verification), znížená spotreba energie pri implementácii zámkov RCU.
Do novej verzie bolo prijatých 16843 opráv od 2178 vývojárov, veľkosť patche je 62 MB (zmeny sa dotkli 14108 súborov, pridalo sa 730195 riadkov kódu, odstránilo sa 409485 riadkov). Približne 42 % všetkých zmien v 6.2 sa týka ovládačov zariadení, asi 16 % zmeny má súvis s aktualizáciou kódu špecifického pre hardvérové architektúry, 12 % súvisí so sieťovým zásobníkom, 4 % s súborovými systémami a 3 % s vnútornými subsystémami jadra.
Hlavné novinky v jadre 6.2:
- Pamäť a systémové služby
- Povolené je zahrnutie kódu a zmien dodávaných pod licenciou Copyleft-Next 0.3.1 do jadra. Licencia Copyleft-Next bola vytvorená jedným z autorov GPLv3 a je úplne kompatibilná s licenciou GPLv2, čo potvrdili právnici spoločností SUSE a Red Hat. V porovnaní s GPLv2 je licencia Copyleft-Next významne kompaktnejšia a jednoduchšia na porozumenie (bola odstránená úvodná časť a zmienka o zastaraných kompromisoch), definuje lehoty a postupy na odstránenie porušení a automaticky odstraňuje požiadavky na copyleft pre zastaraný kód, ktorý má viac ako 15 rokov.
Copyleft-Next tiež obsahuje ustanovenie o poskytovaní práv na patentované technológie, čo na rozdiel od GPLv2 robí túto licenciu kompatibilnú s licenciou Apache 2.0. Pre zabezpečenie plnej kompatibility s GPLv2 je v texte Copyleft-Next jasne uvedené, že odvodená práca môže byť dodávaná nielen pod pôvodnou licenciou Copyleft-Next, ale aj pod licenciou GPL.
- Súčasťou je nástroj „rv“, ktorý poskytuje rozhranie pre interakciu z priestoru používateľa s obslužnými programami subsystému RV (Runtime Verification), určeného na overenie správnosti činnosti na vysoko spoľahlivých systémoch, zaručujúcich absenciu porúch. Kontrola prebieha počas vykonávania prostredníctvom pripojovania obslužných programov k bodom sledovania, ktoré porovnávajú skutočný priebeh vykonávania s vopred definovaným referenčným deterministickým modelom automatu určujúcim očakávané správanie systému.
- V zariadení zRAM, ktoré umožňuje uchovávať oddiel swapovania v pamäti v stlačenej podobe (v pamäti sa vytvára blokové zariadenie, na ktoré prebieha swapovanie so stlačením), je implementovaná možnosť prebalovania stránok s použitím alternatívneho algoritmu na dosiahnutie vyššej úrovne stlačenia. Hlavná myšlienka je poskytnúť výber medzi niekoľkými algoritmami (lzo, lzo-rle, lz4, lz4hc, zstd), ktoré ponúkajú vlastné kompromisy medzi rýchlosťou stlačenia/rozbalenia a úrovňou stlačenia alebo sú optimálne v špeciálnych situáciách (napríklad na stlačenie veľkých stránok pamäte).
- Pridané API „iommufd“ na správu z priestoru používateľa systémom správy pamäte vstup-výstup — IOMMU (I/O Memory-Management Unit). Nové API umožňuje spravovať tabuľky strán pamäte vstup/výstup pomocou súborových popisovačov.
- V BPF je poskytnutá možnosť vytvárania typov, definovania vlastných objektov, budovania vlastnej hierarchie objektov a flexibilného formovania vlastných dátových štruktúr, ako sú prepojené zoznamy. Pre prechody do režimu spánku BPF-programov (BPF_F_SLEEPABLE) bola pridaná podpora zámkov bpf_rcu_read_{,un}lock(). Implementovaná podpora ukladania objektov task_struct. Pridaný map-typ BPF_MAP_TYPE_CGRP_STORAGE, poskytujúci lokálne úložisko pre cgroups.
- Pre mechanizmus zámkov RCU (Read-copy-update) bol zavedený voliteľný mechanizmus „lenivých“ callback-volání, v ktorom sa na základe časovača v dávkovom režime naraz spracúva viacero callback-volaní. Použitie navrhovanej optimalizácie umožňuje znížiť spotrebu energie na zariadeniach Android a ChromeOS o 5-10% vďaka oneskoreniu požiadaviek RCU počas nečinnosti alebo nízkej záťaže systému.
- Bolest, split_lock_mitigate byla přidána pro správu reakce systému na zjištění rozdělených blokací („split lock“), které vznikají při přístupu k nevyrovnaným datům v paměti, protože při provádění atomární instrukce data překračují dvě řady cache CPU. Takové blokace vedou k výraznému poklesu výkonu. Při nastavení split_lock_mitigate na hodnotu 0 je vytištěno pouze varování o problému, zatímco při nastavení na hodnotu 1, kromě varování, dojde k zpomalení procesu, který blokaci způsobil, aby se zachoval výkon zbytku systému.
- Pro architekturu PowerPC byla navržena nová implementace blokací qspinlock, která vykazuje vyšší výkon a řeší některé problémy s blokacemi, které vznikají ve výjimečných případech.
- Kód zpracování přerušení MSI (Message-Signaled Interrupts) byl přepracován, aby odstranil nahromaděné architektonické problémy a přidal podporu pro přiřazení jednotlivých zpracovatelů různým zařízením.
- Pro systém založený na architektuře sada příkazů LoongArch, používané v procesorech Loongson 3 5000, a realizující nový RISC ISA podobný MIPS a RISC-V, byla implementována podpora ftrace, ochrany zásobníku a spícího a čekajícího režimu.
- Byla poskytnuta možnost pojmenování oblastí sdílené anonymní paměti (dříve mohly být názvy určeny pouze soukromé anonymní paměti, přidružené k určitému procesu).
- Byl přidán nový parametr příkazové řádky jádra „trace_trigger“, určený pro aktivaci spouštěče sledování, používaného pro přiřazení podmínkových příkazů vyvolaných při spuštění kontrolního bodu (např. trace_trigger="sched_switch.stacktrace if prev_state == 2").
- Byly zvýšeny požadavky na verzi balíku binutils. Pro sestavení jádra je nyní vyžadováno alespoň binutils 2.25.
- Při volání exec() byla přidána možnost umístit proces do prostoru jména času (time namespace), ve kterém se čas liší od systémového.
- Začal sa presun z vetvy Rust-for-Linux ďalších funkcií súvisiacich s používaním jazyka Rust ako druhého jazyka pre vývoj ovládačov a modulov jadra. Podpora Rust nie je predvolene aktívna a nevedie k zahrnutiu Rust medzi povinné závislosti pri zostavovaní jadra. Navrhnutá v predchádzajúcej vydaní základná funkčnosť bola rozšírená o možnosti na podporu nízkoúrovňového kódu, ako sú typ Vec a makrá pr_debug!(), pr_cont!() a pr_alert!(), ako aj procedurálne makro „#[vtable]“, ktoré zjednodušuje prácu s tabuľkami ukazovateľov na funkcie. Očakáva sa pridanie vysokoúrovňových Rust obalov nad subsystémy jadra, ktoré umožnia vytvárať plnohodnotné ovládače v Rust, v nasledujúcich vydaniach.
- Typ „char“ používaný v jadre je teraz pre všetky architektúry predvolene vyhlásený ako bezznamkový.
- Mechanizmus prerozdeľovania pamäte slab - SLOB (slab allocator), ktorý bol navrhnutý pre systémy s malým objemom pamäte, bol vyhlásený za zastaraný. Namiesto SLOB sa v bežných podmienkach odporúča používať SLUB alebo SLAB. Pre systémy s malým objemom pamäte sa odporúča používať SLUB v režime SLUB_TINY.
- Povolené je zahrnutie kódu a zmien dodávaných pod licenciou Copyleft-Next 0.3.1 do jadra. Licencia Copyleft-Next bola vytvorená jedným z autorov GPLv3 a je úplne kompatibilná s licenciou GPLv2, čo potvrdili právnici spoločností SUSE a Red Hat. V porovnaní s GPLv2 je licencia Copyleft-Next významne kompaktnejšia a jednoduchšia na porozumenie (bola odstránená úvodná časť a zmienka o zastaraných kompromisoch), definuje lehoty a postupy na odstránenie porušení a automaticky odstraňuje požiadavky na copyleft pre zastaraný kód, ktorý má viac ako 15 rokov.
- Diskový subsystém, I/O a súborové systémy
- V Btrfs boli vykonané vylepšenia zamerané na opravu problému „write hole“ pri implementácii RAID 5/6 (pok attempt to recover RAID, if a crash occurred during writing and it is not possible to determine which block was correctly written to which of the RAID devices, which may lead to the corruption of blocks corresponding to unwritten blocks). Okrem toho je pre SSD teraz, ak je to možné, predvolene automaticky aktivované asynchrónne vykonávanie operácie „discard“, čo umožňuje dosiahnuť vyšší výkon vďaka efektívnej skupinovej manipulácii s operáciami „discard“ v rade a spracovaniu radu na pozadí spracovateľom. Bolo zvýšené výkonnosť operácií send a lseek, ako aj ioctl FIEMAP.
- Rozšírené možnosti správy oneskoreného zápisu (writeback, pozadové ukladanie upravených dát) pre blokové zariadenia. V niektorých situáciách, napríklad pri používaní sieťových blokových zariadení alebo USB flash diskov, môže oneskorený zápis viesť k veľkej spotrebe operačnej pamäte. Aby sa dalo riadiť správanie oneskoreného zápisu a udržať veľkosť stránkového cache v určitých medziach, boli v sysfs (\/sys\/class\/bdi\/) navrhnuté nové parametre strict_limit, min_bytes, max_bytes, min_ratio_fine a max_ratio_fine.
- V súborovom systéme F2FS bola implementovaná ioctl operácia atomárnej výmeny, ktorá umožňuje vykonať zápis dát do súboru v rámci jednej atomárnej operácie. V F2FS bol tiež pridaný blokový cache rozsahov, ktorý pomáha identifikovať aktívne používané dáta alebo dáta, ku ktorým sa dlhodobo neprišlo.
- Vo FS ext4 sa zaznamenáva len oprava chýb.
- V súborovom systéme ntfs3 boli navrhnuté niektoré nové možnosti montovania: „nocase“ na správu rozlišovania veľkých a malých písmen v menách súborov a adresárov; windows_name na zákaz vytvárania mien súborov obsahujúcich znaky, ktoré sú neprijateľné pre OS Windows; hide_dot_files na správu označenia skrytých súborov pre súbory začínajúce na bodku.
- V súborovom systéme Squashfs bola implementovaná možnosť montovania „threads=“, ktorá umožňuje určiť počet vlákien pre paralelizáciu operácií rozbalenia. V Squashfs sa tiež objavila možnosť mapovania identifikátorov týkajúceho sa používateľa pripojených súborových systémov, ktorá sa používa na priradenie súborov určitého používateľa na pripojených cudzích oddieloch k inému používateľovi v aktuálnom systéme.
- Prepracovaná implementácia zoznamov kontroly prístupu POSIX (POSIX ACL). V novej implementácii boli odstránené architektonické problémy, zjednodušené údržby kódovej základne a boli zapojené bezpečnejšie typy dát.
- Do subsystému fscrypt, ktorý sa používa na transparentné šifrovanie súborov a adresárov, bola pridaná podpora šifrovacieho algoritmu SM4 (čínska norma GB\/T 32907-2016).
- Poskytla sa možnosť zostaviť jadro bez podpory NFSv2 (v budúcnosti plánujú úplne zastaviť podporu NFSv2).
- Zmenila sa organizácia overovania prístupu k zariadeniam NVMe. Poskytla sa možnosť čítania a zápisu na zariadenie NVMe, ak má zapisovací proces prístup k špeciálnemu súboru zariadenia (predtým musel mať proces oprávnenie CAP_SYS_ADMIN).
- Bol odstránený ovládač pre CD/DVD, ktorý bol vyhlásený za zastaraný v roku 2016.
- Virtualizácia a bezpečnosť
- Bol implementovaný nový spôsob ochrany pred zraniteľnosťou Retbleed v procesoroch Intel a AMD, ktorý používa sledovanie hĺbky volania, čo neznižuje výkon tak, ako predchádzajúca ochrana pred Retbleed. Na aktiváciu nového režimu bol navrhnutý parameter príkazového riadka jadra „retbleed=stuff“.
- Bol pridaný hybridný mechanizmus ochrany toku vykonávania príkazov FineIBT, kombinujúci použitie hardvérových inštrukcií Intel IBT (Indirect Branch Tracking) a softvérovej ochrany kCFI (kernel Control Flow Integrity) na zablokovanie porušenia normálneho poradia vykonávania (control flow) v dôsledku použitých exploitov, ktoré menia v pamäti uložené ukazovatele na funkcie. FineIBT povoľuje vykonávanie prostredníctvom nepriameho skoku len v prípade, že prechod smeruje na inštrukciu ENDBR, ktorá sa umiestňuje na začiatok funkcie. Navyše, analogicky s mechanizmom kCFI sa následne vykonáva kontrola hashov, ktorá zabezpečuje nemennosť ukazovateľov.
- Bol pridaný limit na zablokovanie útokov, ktoré manipulujú s generovaním stavov „oops“, po ktorých problémové úlohy končia a stav sa obnovuje bez zastavenia práce systému. Pri veľmi vysokom počte volaní stavu „oops“ dochádza k preplneniu počítadla odkazov (refcount), čo umožňuje zneužívať zraniteľnosti spôsobené dereferenciou NULL ukazovateľov. Na ochranu pred takýmito útokmi bol do jadra pridaný limit na maximálny počet spustení „oops“, po prekročení ktorého jadro iniciuje prechod do stavu „panic“ s nasledujúcou reštartovaním, čo znemožní dosiahnuť počet iterácií potrebný na preplnenie refcount. Predvolene je limit nastavený na 10 000 „oops“, ale pri želaní ho možno zmeniť cez parameter oops_limit.
- Bol pridanej konfiguračný parameter LEGACY_TIOCSTI a sysctl legacy_tiocsti na deaktiváciu možnosti posielania údajov do terminálu pomocou ioctl TIOCSTI, pretože táto funkčnosť sa môže využiť na substitúciu náhodných symbolov do vstupného bufferu terminálu a simuláciu používateľského vstupu.
- Navrhnutý nový typ vnútorných štruktúr encoded_page, v ktorom sa dolné bity ukazovateľa používajú na uchovávanie dodatočných informácií využívaných na ochranu pred náhodným de-referencovaním ukazovateľa (ak je skutočne potrebné de-referencovanie, najprv je potrebné vymazať tieto dodatočné bity).
- Na platforme ARM64 v priebehu zavádzania bola poskytnutá možnosť zapnúť a vypnúť softvérovú implementáciu mechanizmu Shadow Stack, ktorý sa používa na ochranu pred prepisovaním adresy návratu z funkcie v prípade pretečenia zásobníka (podstata ochrany spočíva v uchovávaní adresy návratu do samostatného "tieňového" zásobníka po odovzdaní riadenia funkcii a vyradení tejto adresy pred návratom z funkcie). Podpora hardvérovej a softvérovej implementácie Shadow Stack v jednej zostave jadra umožňuje použiť jedno jadro na rôznych ARM systémoch, bez ohľadu na podporu inštrukcií na autentizáciu ukazovateľov. Zapnutie softvérovej implementácie sa vykonáva počas zavádzania potrebnými inštrukciami v kóde.
- Pridala sa podpora používania mechanizmu asynchrónneho upozornenia na výstup (asynchronous exit notification) na procesoroch Intel, ktorý umožňuje odhaliť single-step útoky na kód vykonávaný v SGX enclaves.
- Navrhnutá sada operácií, ktorá umožňuje hypervízorom spracovávať požiadavky z hostiteľských systémov Intel TDX (Trusted Domain Extensions).
- Odstránené konfiguračné nastavenia jadra RANDOM_TRUST_BOOTLOADER a RANDOM_TRUST_CPU, namiesto ktorých sa majú používať príslušné možnosti príkazového riadku random.trust_bootloader a random.trust_cpu.
- Do mechanizmu Landlock, ktorý obmedzuje interakciu skupiny procesov s vonkajším prostredím, bola pridaná podpora príznaku LANDLOCK_ACCESS_FS_TRUNCATE, ktorý umožňuje kontrolovať vykonávanie operácií skracovania súborov.
- Sieťový subsystém
- Pre IPv6 bola pridaná podpora PLB (Preventívne vyvažovanie zaťaženia), mechanizmu vyvažovania zaťaženia medzi sieťovými linkami, ktorý sa zameriava na znižovanie bodov preťaženia na prepínačoch dátových centier. Zmenou štítku toku IPv6 PLB náhodne mení cesty paketov na vyrovnanie zaťaženia na portoch prepínača. Na zníženie preusporiadania paketov sa táto operácia vykonáva po možných prestávkach. Použitie PLB v dátových centrách Google umožnilo znížiť disbalanc zaťaženia na portoch prepínačov v priemere o 60 %, znížiť straty paketov o 33 % a znížiť oneskorenie o 20 %.
- Bol pridaný ovládač pre zariadenia MediaTek s podporou Wi-Fi 7 (802.11be).
- Pridaná podpora 800-gigabitových liniek.
- Pridaná možnosť premenovania sieťových rozhraní za behu, bez zastavenia činnosti.
- Do hlásení o SYN flooding boli pridané zmienky o IP adrese, na ktorú paket prišiel.
- Pre UDP bola implementovaná možnosť používania samostatných hashovacích tabuliek pre rôzne sieťové menné priestory.
- Pre sieťové mosty bola implementovaná podpora metódy autentifikácie MAB (MAC Authentication Bypass).
- Pre protokol CAN (CAN_RAW) bola implementovaná podpora režimu soketov SO_MARK pre pripevnenie filtrov prevádzky založených na fwmark.
- V ipset bola implementovaná nová voľba bitmask, ktorá umožňuje zadať masku na základe ľubovoľných bitov v IP adrese (napríklad, „ipset create set1 hash:ip bitmask 255.128.255.0“).
- V nf_tables bola pridaná podpora spracovania vnútorných (inner) hlavičiek nachádzajúcich sa v tunelovaných paketocht.
- Zariadenie
- Bola pridaná podsystem ‚accel‘ s implementáciou rámca pre urýchľovače výpočtov, ktoré môžu byť dodávané ako v podobe samostatných ASIC, tak aj vo forme IP blokov v SoC a GPU. Hlavne takéto urýchľovače sú zamerané na zrýchlenie riešenia úloh strojového učenia.
- V ovládači amdgpu bola zapnutá podpora IP komponentov GC, PSP, SMU a NBIO. Pre systémy ARM64 bola zapnutá podpora DCN (Display Core Next). Implementácia zabezpečeného výstupu na obrazovku sa preniesla z používania DCN10 na DCN21 a teraz môže byť použitá pri pripojení viacerých obrazoviek.
- V ovládači i915 (Intel) bola stabilizovaná podpora diskrétnych grafických kariet Intel Arc (DG2/Alchemist).
- V ovládači Nouveau bola implementovaná podpora GPU NVIDIA GA102 (RTX 30) na báze architektúry Ampere. Pre karty nva3 (GT215) bola pridaná možnosť riadiť podsvietenie.
- Pridaná podpora bezdrôtových adaptérů na báze čipov Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) a MediaTek MT7996, Bluetooth rozhraní Broadcom BCM4377/4378/4387, ako aj Ethernet ovládačov Motorcomm yt8521, NVIDIA Tegra GE.
- Pridaná podpora ASoC (ALSA System on Chip) pre integrované zvukové čipy HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. Pridaná podpora zvukového rozhrania Focusrite Saffire Pro 40. Pridaný zvukový codec Realtek RT1318.
- Pridaná podpora smartfónov a tabletov Sony (Xperia 10 IV, 5 IV, X a X compact, OnePlus One, 3, 3T a Nord N100, Xiaomi Poco F1 a Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1.
- Pridaná podpora ARM SoC a platforiem 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.
Zároveň latinskoamerický Fond slobodného softvéru vytvoril variant úplne slobodného jadra 6.2 — Linux-libre 6.2-gnu, vyčisteného od prvkov firmvéru a ovládačov, ktoré obsahujú neslobodné komponenty alebo úseky kódu, ktorých použitie je obmedzené výrobcom. V novej verzii bola prečistená nová blobov v ovládači nouveau. Vypnuté načítanie blobov v ovládačoch mt7622, mt7996 wifi a bcm4377 bluetooth. Prečistené mená blobov v dts súboroch pre architektúru Aarch64. Aktualizovaný kód na prečistenie blobov v rôznych ovládačoch a subsystémoch. Ukončené prečistenie ovládača s5k4ecgx, pretože bol odstránený z jadra.
Zdroj: opennet.ru
