Vydanie jadra Linux 6.2

Po dvoch mesiacoch vývoja predstavil Linus Torvalds vydanie linuxového jadra 6.2. Medzi najvýznamnejšie zmeny: je povolené akceptovanie kódu pod licenciou Copyleft-Next, je vylepšená implementácia RAID5/6 v Btrfs, pokračuje integrácia podpory pre jazyk Rust, znižuje sa réžia ochrany pred útokmi Retbleed, pridaná možnosť regulovať spotrebu pamäte počas spätného zápisu, pridaný mechanizmus pre vyrovnávanie TCP PLB (Protective Load Balancing), pridaný mechanizmus ochrany hybridného toku príkazov (FineIBT), BPF má teraz možnosť definovať vlastné objekty a dátové štruktúry , je zahrnutá utilita rv (Runtime Verification), spotreba energie pri implementácii zámkov RCU bola znížená.

Nová verzia obsahuje 16843 2178 opráv od 62 14108 vývojárov, veľkosť opravy je 730195 MB (zmeny sa dotkli 409485 42 súborov, pridaných 6.2 16 riadkov kódu, vymazaných 12 4 riadkov). Približne 3 % všetkých zmien zavedených v XNUMX sa týka ovládačov zariadení, približne XNUMX % zmien súvisí s aktualizáciou kódu špecifického pre hardvérové ​​architektúry, XNUMX % súvisí so sieťovým zásobníkom, XNUMX % sa týka súborových systémov a XNUMX % súvisia s internými subsystémami jadra.

Kľúčové inovácie v jadre 6.2:

  • Pamäťové a systémové služby
    • Je povolené zahrnúť do kódu jadra a zmeny poskytované v rámci licencie Copyleft-Next 0.3.1. Licencia Copyleft-Next bola vytvorená jedným z autorov GPLv3 a je plne kompatibilná s licenciou GPLv2, ako potvrdili právnici zo SUSE a Red Hat. V porovnaní s GPLv2 je licencia Copyleft-Next oveľa kompaktnejšia a zrozumiteľnejšia (bola odstránená úvodná časť a zmienka o zastaraných kompromisoch), definuje časový rámec a postup na odstránenie porušení a automaticky odstraňuje požiadavky na copyleft pre zastaraný softvér, ktorý má viac ako 15 rokov.

      Copyleft-Next obsahuje aj klauzulu o udelení patentovanej technológie, ktorá na rozdiel od GPLv2 robí túto licenciu kompatibilnou s licenciou Apache 2.0. Aby sa zabezpečila úplná kompatibilita s GPLv2, Copyleft-Next výslovne uvádza, že okrem pôvodnej licencie Copyleft-Next môže byť v rámci licencie GPL poskytnuté aj odvodené dielo.

    • Štruktúra zahŕňa obslužný program „rv“, ktorý poskytuje rozhranie pre interakciu z užívateľského priestoru s obslužnými programami subsystému RV (Runtime Verification), určený na kontrolu správnej činnosti na vysoko spoľahlivých systémoch, ktoré zaručujú absenciu porúch. Overenie sa vykonáva za behu pripájaním obslužných programov k bodom sledovania, ktoré kontrolujú skutočný priebeh vykonávania oproti vopred určenému referenčnému deterministickému modelu stroja, ktorý definuje očakávané správanie systému.
    • Zariadenie zRAM, ktoré umožňuje uloženie swapovacieho oddielu do pamäte v komprimovanej forme (v pamäti sa vytvorí blokové zariadenie, na ktoré sa vykoná swapovanie s kompresiou), implementuje možnosť prebaľovania stránok pomocou alternatívneho algoritmu na dosiahnutie vyššej úrovne. kompresie. Hlavnou myšlienkou je poskytnúť výber medzi niekoľkými algoritmami (lzo, lzo-rle, lz4, lz4hc, zstd), ktoré ponúkajú vlastné kompromisy medzi rýchlosťou kompresie/dekompresie a úrovňou kompresie, alebo optimálne v špeciálnych situáciách (napríklad na kompresiu veľkých pamäťové stránky).
    • Pridané API "iommufd" pre správu systému správy I/O pamäte - IOMMU (I/O Memory-Management Unit) z užívateľského priestoru. Nové API umožňuje spravovať tabuľky stránok I/O pamäte pomocou deskriptorov súborov.
    • BPF poskytuje možnosť vytvárať typy, definovať vlastné objekty, budovať vlastnú hierarchiu objektov a flexibilne vytvárať vlastné dátové štruktúry, ako sú napríklad prepojené zoznamy. Pre programy BPF, ktoré prechádzajú do režimu spánku (BPF_F_SLEEPABLE), bola pridaná podpora pre zámky bpf_rcu_read_{,un}lock(). Implementovaná podpora pre ukladanie objektov task_struct. Pridaný typ mapy BPF_MAP_TYPE_CGRP_STORAGE, ktorý poskytuje lokálne úložisko pre cgroups.
    • Pre blokovací mechanizmus RCU (Read-copy-update) je implementovaný voliteľný mechanizmus „lenivých“ volaní spätného volania, v ktorom sa pomocou časovača v dávkovom režime spracováva niekoľko spätných volaní naraz. Aplikácia navrhovanej optimalizácie nám umožňuje znížiť spotrebu energie na zariadeniach so systémom Android a ChromeOS o 5-10 % odložením požiadaviek RCU počas nečinnosti alebo nízkej záťaže systému.
    • Pridaný sysctl split_lock_mitigate na riadenie toho, ako systém zareaguje, keď zistí rozdelené zámky, ktoré sa vyskytujú pri prístupe k nezarovnaným údajom v pamäti v dôsledku prechodu údajov cez dva riadky vyrovnávacej pamäte CPU pri vykonávaní atómovej inštrukcie. Takéto blokády vedú k výraznému poklesu výkonu. Nastavenie split_lock_mitigate na 0 iba zobrazí varovanie, že sa vyskytol problém, zatiaľ čo nastavenie split_lock_mitigate na 1 tiež spôsobí spomalenie procesu, ktorý spôsobil uzamknutie, aby sa zachoval výkon pre zvyšok systému.
    • Pre architektúru PowerPC bola navrhnutá nová implementácia qspinlock, ktorá demonštruje vyšší výkon a rieši niektoré problémy so zamykaním, ktoré vznikajú vo výnimočných prípadoch.
    • Kód spracovania prerušení MSI (Message-Signaled Interrupts) bol prepracovaný, čím sa odstránili nahromadené architektonické problémy a pridala sa podpora pre viazanie jednotlivých obslužných programov na rôzne zariadenia.
    • Pre systémy založené na architektúre inštrukčnej sady LoongArch používanej v procesoroch Loongson 3 5000 a implementujúcej nový RISC ISA, podobne ako MIPS a RISC-V, je implementovaná podpora pre ftrace, ochranu zásobníka, spánok a pohotovostný režim.
    • Bola poskytnutá možnosť priradiť mená oblastiam zdieľanej anonymnej pamäte (predtým bolo možné mená priradiť iba súkromnej anonymnej pamäti priradenej konkrétnemu procesu).
    • Pridaný nový parameter príkazového riadka jadra „trace_trigger“, navrhnutý na aktiváciu spúšťača sledovania používaného na viazanie podmienených príkazov volaných pri spustení kontroly riadenia (napríklad trace_trigger=”sched_switch.stacktrace, ak prev_state == 2″).
    • Požiadavky na verziu balíka binutils boli zvýšené. Vytvorenie jadra teraz vyžaduje aspoň binutils 2.25.
    • Pri volaní exec() pribudla možnosť umiestniť proces do časového menného priestoru, v ktorom sa čas líši od systémového času.
    • Začali sme presúvať ďalšie funkcie z vetvy Rust-for-Linux súvisiace s používaním jazyka Rust ako druhého jazyka na vývoj ovládačov a modulov jadra. Podpora Rust je predvolene vypnutá a nevedie k tomu, že Rust bude zahrnutý ako požadovaná závislosť zostavenia jadra. Základná funkcionalita ponúkaná v poslednom vydaní je rozšírená o podporu nízkoúrovňového kódu, ako je typ Vec a makrá pr_debug!(), pr_cont!() a pr_alert!(), ako aj procedurálne makro „#[vtable ]“, čo zjednodušuje prácu s tabuľkami ukazovateľov funkcií. V budúcich vydaniach sa očakáva pridanie vysokoúrovňových väzieb Rust nad subsystémy jadra, ktoré umožnia vytvorenie plnohodnotných ovládačov v Ruste.
    • Typ "char" používaný v jadre je teraz štandardne deklarovaný ako unsigned pre všetky architektúry.
    • Mechanizmus prideľovania slabej pamäte - SLOB (slab alokátor), ktorý bol navrhnutý pre systémy s malým množstvom pamäte, bol vyhlásený za zastaraný. Namiesto SLOB sa za normálnych podmienok odporúča použiť SLUB alebo SLAB. Pre systémy s malým množstvom pamäte sa odporúča používať SLUB v režime SLUB_TINY.
  • Diskový subsystém, I/O a súborové systémy
    • Boli vykonané vylepšenia Btrfs zamerané na odstránenie problému „diery pri zápise“ v implementáciách RAID 5/6 (pokus o obnovenie RAID, ak počas zápisu dôjde k zlyhaniu a nie je možné pochopiť, ktorý blok na ktorom zariadení RAID bol zapísaný správne, čo môže viesť k deštrukcii bloku, zodpovedajúcemu upisovaným blokom). Okrem toho teraz SSD disky automaticky povoľujú asynchrónnu operáciu vyraďovania v predvolenom nastavení, keď je to možné, čo umožňuje lepší výkon vďaka efektívnemu zoskupovaniu operácií vyraďovania do frontov a spracovaniu frontu procesorom na pozadí. Vylepšený výkon operácií odosielania a lseek, ako aj FIEMAP ioctl.
    • Rozšírili sa možnosti správy odloženého zápisu (spätný zápis, ukladanie zmenených údajov na pozadí) pre blokové zariadenia. V niektorých situáciách, napríklad pri používaní zariadení so sieťovým blokom alebo diskov USB, môže lenivý zápis viesť k veľkej spotrebe pamäte RAM. S cieľom kontrolovať správanie lenivých zápisov a udržiavať veľkosť vyrovnávacej pamäte stránky v rámci určitých limitov boli do sysfs (/sys/class/bdi/) zavedené nové parametre strict_limit, min_bytes, max_bytes, min_ratio_fine a max_ratio_fine.
    • Súborový systém F2FS implementuje operáciu ioctl atomic replacement, ktorá vám umožňuje zapisovať údaje do súboru v rámci jednej atómovej operácie. F2FS tiež pridáva vyrovnávaciu pamäť rozsahu bloku, ktorá pomáha identifikovať aktívne používané údaje alebo údaje, ku ktorým sa dlho nepristupovalo.
    • V ext4 FS sú zaznamenané iba opravy chýb.
    • Súborový systém ntfs3 ponúka niekoľko nových možností pripojenia: „nocase“ na ovládanie rozlišovania malých a veľkých písmen v názvoch súborov a adresárov; windows_name na zákaz vytvárania názvov súborov obsahujúcich znaky, ktoré nie sú platné pre Windows; hide_dot_files na ovládanie priradenia štítka skrytého súboru pre súbory začínajúce bodkou.
    • Súborový systém Squashfs implementuje možnosť pripojenia „threads=“, ktorá vám umožňuje definovať počet vlákien na paralelizáciu dekompresných operácií. Squashfs tiež zaviedol možnosť mapovania ID používateľov pripojených súborových systémov, ktoré sa používajú na porovnávanie súborov konkrétneho používateľa na pripojenom cudzom oddiele s iným používateľom v aktuálnom systéme.
    • Implementácia zoznamov riadenia prístupu POSIX (POSIX ACL) bola prepracovaná. Nová implementácia odstraňuje architektonické problémy, zjednodušuje údržbu kódovej základne a zavádza bezpečnejšie typy údajov.
    • Subsystém fscrypt, ktorý sa používa na transparentné šifrovanie súborov a adresárov, má pridanú podporu pre šifrovací algoritmus SM4 (čínsky štandard GB/T 32907-2016).
    • Bola poskytnutá možnosť zostaviť jadro bez podpory NFSv2 (v budúcnosti plánujú úplne ukončiť podporu NFSv2).
    • Organizácia kontroly prístupových práv k zariadeniam NVMe bola zmenená. Poskytuje možnosť čítať a zapisovať do zariadenia NVMe, ak má proces zápisu prístup k vyhradenému súboru zariadenia (predtým musel mať proces povolenie CAP_SYS_ADMIN).
    • Odstránil sa ovládač balíka CD/DVD, ktorý bol v roku 2016 zastaraný.
  • Virtualizácia a bezpečnosť
    • V procesoroch Intel a AMD bola implementovaná nová metóda ochrany pred zraniteľnosťou Retbleed, využívajúca sledovanie hĺbky hovoru, ktoré nespomaľuje prácu tak výrazne ako predtým prítomná ochrana proti Retbleed. Na aktiváciu nového režimu bol navrhnutý parameter príkazového riadku jadra „retbleed=stuff“.
    • Pridaný hybridný mechanizmus ochrany toku inštrukcií FineIBT, ktorý kombinuje použitie hardvérových inštrukcií Intel IBT (Indirect Branch Tracking) a softvérovej ochrany kCFI (kernel Control Flow Integrity) na blokovanie narušenia normálneho vykonávacieho príkazu (kontrolného toku) v dôsledku použitia. exploitov, ktoré upravujú ukazovatele uložené v pamäti na funkcie. FineIBT umožňuje vykonanie nepriamym skokom len v prípade skoku na inštrukciu ENDBR, ktorá je umiestnená na samom začiatku funkcie. Okrem toho, analogicky s mechanizmom kCFI, sa potom kontrolujú haše, aby sa zaručila nemennosť ukazovateľov.
    • Pridané obmedzenia na blokovanie útokov, ktoré manipulujú s generovaním stavov „oops“, po ktorých sa problematické úlohy dokončia a stav sa obnoví bez zastavenia systému. Pri veľmi veľkom počte volaní do stavu „oops“ dochádza k pretečeniu referenčného počítadla (refcount), čo umožňuje využitie zraniteľností spôsobených dereferenciami NULL ukazovateľa. Na ochranu pred takýmito útokmi bol do jadra pridaný limit pre maximálny počet spúšťačov „oops“, po prekročení ktorého jadro iniciuje prechod do stavu „panika“, po ktorom nasleduje reštart, ktorý neumožní dosiahnuť počet iterácií potrebných na prekročenie refcountu. V predvolenom nastavení je limit nastavený na 10 XNUMX „oops“, ale v prípade potreby ho možno zmeniť pomocou parametra oops_limit.
    • Pridaný konfiguračný parameter LEGACY_TIOCSTI a sysctl legacy_tiocsti na zakázanie možnosti vkladať údaje do terminálu pomocou ioctl TIOCSTI, pretože túto funkciu možno použiť na nahradenie ľubovoľných znakov do vyrovnávacej pamäte terminálu a simuláciu vstupu používateľa.
    • Navrhuje sa nový typ vnútornej štruktúry encoded_page, v ktorej sa spodné bity ukazovateľa používajú na ukladanie dodatočných informácií používaných na ochranu pred náhodnou dereferenciou ukazovateľa (ak je dereferencia skutočne potrebná, tieto dodatočné bity sa musia najskôr vymazať) .
    • Na platforme ARM64 je v štádiu zavádzania možné povoliť alebo zakázať softvérovú implementáciu mechanizmu Shadow Stack, ktorý slúži na ochranu pred prepísaním návratovej adresy z funkcie v prípade pretečenia vyrovnávacej pamäte na zásobníku ( podstatou ochrany je uloženie návratovej adresy do samostatného „tieňového“ zásobníka po prenose riadenia do funkcie a načítaní danej adresy pred ukončením funkcie). Podpora hardvérových a softvérových implementácií Shadow Stack v jednej zostave jadra vám umožňuje používať jedno jadro na rôznych systémoch ARM bez ohľadu na ich podporu pokynov na autentifikáciu ukazovateľa. Zahrnutie softvérovej implementácie sa vykonáva prostredníctvom nahradenia potrebných inštrukcií v kóde počas načítavania.
    • Pridaná podpora pre používanie asynchrónneho mechanizmu oznamovania ukončenia na procesoroch Intel, ktorý umožňuje detekovať jednokrokové útoky na kód vykonávaný v enklávach SGX.
    • Navrhuje sa súbor operácií, ktoré umožňujú hypervízoru podporovať požiadavky z hosťujúcich systémov Intel TDX (Trusted Domain Extensions).
    • Nastavenia zostavy jadra RANDOM_TRUST_BOOTLOADER a RANDOM_TRUST_CPU boli odstránené v prospech zodpovedajúcich možností príkazového riadka random.trust_bootloader a random.trust_cpu.
    • Mechanizmus Landlock, ktorý umožňuje obmedziť interakciu skupiny procesov s vonkajším prostredím, pridal podporu pre príznak LANDLOCK_ACCESS_FS_TRUNCATE, ktorý umožňuje riadiť vykonávanie operácií skracovania súborov.
  • Sieťový subsystém
    • Pre IPv6 bola pridaná podpora pre PLB (Protective Load Balancing), mechanizmus vyrovnávania záťaže medzi sieťovými prepojeniami zameraný na zníženie preťaženia prepínačov dátových centier. Zmenou IPv6 Flow Label, PLB náhodne mení cesty paketov, aby vyvážila záťaž na portoch prepínača. Aby sa znížilo preskupovanie paketov, táto operácia sa vykonáva vždy, keď je to možné, po obdobiach nečinnosti. Použitie PLB v dátových centrách Google znížilo nerovnováhu záťaže na portoch prepínačov v priemere o 60 %, znížilo stratu paketov o 33 % a znížilo latenciu o 20 %.
    • Pridaný ovládač pre zariadenia MediaTek podporujúce Wi-Fi 7 (802.11be).
    • Pridaná podpora pre 800-gigabitové odkazy.
    • Pridaná možnosť premenovať sieťové rozhrania za chodu, bez zastavenia práce.
    • Do log správ o SYN flood pribudla zmienka o IP adrese, na ktorú paket prišiel.
    • Pre UDP bola implementovaná možnosť používať samostatné hašovacie tabuľky pre rôzne sieťové menné priestory.
    • Pre sieťové mosty bola implementovaná podpora pre autentifikačnú metódu MAB (MAC Authentication Bypass).
    • Pre protokol CAN (CAN_RAW) bola implementovaná podpora pre režim soketu SO_MARK na pripojenie filtrov prevádzky na báze fwmark.
    • ipset implementuje nový parameter bitmask, ktorý vám umožňuje nastaviť masku na základe ľubovoľných bitov v adrese IP (napríklad „ipset create set1 hash:ip bitmask 255.128.255.0“).
    • Pridaná podpora pre spracovanie interných hlavičiek vo vnútri tunelovaných paketov do nf_tables.
  • Оборудование
    • Subsystém „accel“ bol pridaný s implementáciou frameworku pre výpočtové akcelerátory, ktoré môžu byť dodávané buď vo forme individuálnych ASIC alebo vo forme IP blokov vo vnútri SoC a GPU. Tieto akcelerátory sú zamerané najmä na urýchlenie riešenia problémov strojového učenia.
    • Ovládač amdgpu obsahuje podporu pre komponenty GC, PSP, SMU a NBIO IP. Pre systémy ARM64 je implementovaná podpora pre DCN (Display Core Next). Implementácia chráneného výstupu obrazovky bola presunutá z používania DCN10 na DCN21 a teraz sa dá použiť pri pripojení viacerých obrazoviek.
    • Ovládač i915 (Intel) má stabilizovanú podporu pre diskrétne grafické karty Intel Arc (DG2/Alchemist).
    • Ovládač Nouveau podporuje GPU NVIDIA GA102 (RTX 30) založené na architektúre Ampere. Pre karty nva3 (GT215) pribudla možnosť ovládať podsvietenie.
    • Pridaná podpora pre bezdrôtové adaptéry založené na čipoch Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) a MediaTek MT7996, Broadcom BCM4377/4378/4387 Bluetooth radiče, ako aj ovládače Ethernet Motorcoms8521 a ytXNUMX Motorcoms.
    • Pridaná podpora ASoC (ALSA System on Chip) pre vstavané 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 pre zvukové rozhranie Focusrite Saffire Pro 40. Pridaný zvukový kodek Realtek RT1318.
    • Pridaná podpora pre smartfóny a tablety 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 pre ARM SoC a Apple T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460S), SM6375S dosky , SDM695 (Snapdragon 670), MSM670 (Snapdragon 8976), MSM652 (Snapdragon 8956), RK650 Odroid-Go/rg3326, Zyxel NSA351S, InnoComm i.MX310MM, Odroid Go Ultra.

Latinskoamerická nadácia pre slobodný softvér zároveň vytvorila verziu úplne bezplatného jadra 6.2 – Linux-libre 6.2-gnu, zbavenú prvkov firmvéru a ovládačov obsahujúcich proprietárne komponenty alebo časti kódu, ktorých rozsah je obmedzený výrobca. Nové vydanie vyčistí nové škvrny v ovládači nouveau. Načítanie blobu je zakázané v ovládačoch mt7622, ​​​​mt7996 wifi a bcm4377 bluetooth. Vyčistené názvy objektov blob v súboroch dts pre architektúru Aarch64. Aktualizovaný kód čistenia blob v rôznych ovládačoch a podsystémoch. Prestal sa čistiť ovládač s5k4ecgx, pretože bol odstránený z jadra.

Zdroj: opennet.ru

Pridať komentár