Vydanie jadra Linux 6.6

Po dvoch mesiacoch vývoja Linus Torvalds predstavil vydanie jadra Linux 6.6. Medzi najvýraznejšími zmenami sú: nový plánovač úloh EEVDF; mechanizmus tienového zásobníka na ochranu pred exploitmi; podpora fs-verity v OverlayFS; implementácia kvôt a xattr v tmpfs; príprava online fsck v XFS; posilnené sledovanie exportu symbolov „GPL-only“; podpora sieťových soketov v io_uring; náhodná pamäť v kmalloc(); označenie ReiserFS ako zastaraného; v Nouveau pribudli primitíva pre Vulkan ovládač NVK.

Do novej verzie bolo zahrnutých 15291 opráv od 2058 vývojárov, veľkosť patchu je 39 MB (zmeny sa dotkli 14844 súborov, pridalo sa 553359 riadkov kódu, odstránilo sa 284012 riadkov). V predchádzajúcom vydaní bolo 14674 opráv od 2016 vývojárov, veľkosť patchu bola 78 MB. Približne 44% všetkých predložených zmien v 6.6 súvisí s ovládačmi zariadení, asi 17% zmien sa týka aktualizácie kódu špecifického pre hardvérové architektúry, 11% sa týka sieťového zásobníka, 4% sa týka súborových systémov a 3% s vnútornými subsystémami jadra.

Hlavné novinky v jadre 6.6:

  • Pamäť a systémové služby
    • Bol implementovaný nový plánovač úloh EEVDF (Earliest Eligible Virtual Deadline First), ktorý nahradil plánovač CFS (Completely Fair Scheduler), dodávaný od jadra 2.6.23. Nový plánovač pri výbere nasledujúceho procesu na odovzdanie vykonávania zohľadňuje procesy, ktoré nedostali dostatok CPU zdrojov alebo dostali nezaslúžene veľa CPU času. V prvom prípade sa presadzuje odovzdanie riadenia procesu, a naopak, v druhom sa odkladá. Starý plánovač CFS používal na určenie procesov, ktoré si zasluhujú osobitnú pozornosť, heuristiku a jemné ladenie, zatiaľ čo nový plánovač ich sleduje jasnejšie a nevyžaduje jemné ladenie. Predpokladá sa, že EEVDF prispeje k zníženiu latencií pri vykonávaní úloh, s ktorými mal CFS problémy s plánovaním.
    • Boli vykonané zmeny v spracovaní vnútorných symbolov kategórie „GPL-only“, ktoré majú za cieľ sťažiť využívanie proprietárnymi modulmi GPL- vrstiev na obídenie obmedzení prístupu k subsystémom jadra, ktoré povoľujú prístup iba kódom pod licenciou GPL. V funkcii symbol_get() pre proprietárne moduly bola zakázaná možnosť vyhľadávania symbolov označených ako GPL-only a naopak, GPL-moduly nebudú schopné nájsť symboly exportované proprietárnymi modulmi.
    • Boli pridané dodatočné nastavenia pracovných frontov (unbound workqueue) na zlepšenie efektívnosti opätovného využívania procesorovej cache na veľkých systémoch, ktoré majú niekoľko cache tretej úrovne (L3). Do jadra bola tiež zahrnutá utilita tools/workqueue/wq_dump.py na kontrolu aktuálnej konfigurácie pracovných frontov.
    • Do subsystému io_uring bola pridaná základná podpora pre operácie a príkazy špecifické pre sieťové sokety. Pridaný sysctl io_uring_disabled na deaktiváciu io_uring na úrovni celého systému. V io_uring bol tiež výrazne zrýchlen priamy vstup/výstup (Direct I/O) v asynchrónnom režime. Zisk priepustnosti a zníženie latencií pri vykonávaní operácií vstupu/výstupu po vykonaných zmenách dosahuje 37%.
    • Pre architektúru PA-RISC bol implementovaný JIT kompilátor pre BPF.
    • Do nastavenia /sys/devices/system/cpu/smt/control bola pridaná podpora číselných parametrov, ktoré určujú počet vlákien dostupných pre každé CPU jadro (predtým boli podporované iba hodnoty „on“ a „off“ na zapnutie a vypnutie podpory symetrického viacejvláknového spracovania). Novú funkciu je možné využiť na niektorých procesoroch PowerPC, ktoré podporujú režim horúceho zapojenia symetrického viacejvláknového spracovania („hotplug SMT“), na selektívne zapínanie SMT na konkrétnych jadrách počas prevádzky.
    • Pokračuje prenos zmien z vetvy Rust-for-Linux, ktoré súvisia s používaním jazyka Rust ako druhého jazyka na vývoj ovládačov a modulov jadra (podpora Rust nie je predvolene aktivovaná a nezahŕňa Rust medzi povinné závislosti pri zostavovaní jadra). Prešiel sa na použitie verzií Rust 1.71.1 a bindgen 0.65.1. Implementoval sa typáž ‘Zeroable’. Pridané procedurálne makrá ‘paste!’ a ‘#[derive(Zeroable)]’. Zabezpečená kompatibilita s ‘#[pin_data]’. Pridané funkcie inicializácie ‘{,pin_}init_array_from_fn()’ a metóda ‘{,pin_}chain’. Rozšírené možnosti modulu ‘types’. Do rámca jednotkového testovania kunit bola pridaná možnosť spúšťania testov z dokumentácie Rust.
    • Pridaná podsústava ‘eventfs’, ktorá umožňuje výrazne znížiť spotrebu pamäte v systéme sledovania tým, že sa zbavuje uchovávania nadbytočných štruktúr používaných na reprezentáciu bodov sledovania v súborovom systéme. Predtým sa takéto štruktúry vytvárali pre všetky body sledovania, bez ohľadu na to, či sa sledovanie používalo. S pomocou eventfs môžu byť takéto štruktúry vytvárané dynamicky, iba v prípade ich potreby.
    • Rozšírené možnosti utilíty perf.
    • Do súboru /proc/pid/smaps pridali informácie na diagnostiku efektívnosti fungovania mechanizmu zlúčenia identických stránok pamäte (KSM, Kernel Samepage Merging).
    • Odstránené API Frontswap, ktoré umožňovalo umiestniť oddiel swapu do pamäte, ktorú nie je možné priamo adresovať a ktorá neposkytuje aktuálne informácie o dostupnosti voľného miesta. Toto API sa používalo len v zswap, takže bolo rozhodnuté priamo používať túto funkcionalitu v zswap a zbaviť sa zbytočných vrstiev.
    • Pre architektúru RISC-V bola pridaná podpora prístupu k výkonnostným čítačom z priestorov používateľov a možnosť umiestnenia dumpu jadra po zlyhaní do oblasti mimo 4GB.
    • Pridaná základná podpora pre inštrukcie ARM SME (Scalable Matrix Extension).
    • Implementovaná možnosť používania ladicích nástrojov KDB, KGDB, kcov, KFENCE a KASAN na systémoch s architektúrou LoongArch.
    • Pridaná podpora súborov na testovanie jadra v systéme kontinuálnej integrácie GitLab, ktorý sa používa pri vývoji grafických ovládačov.
  • Diskový subsystém, I/O a súborové systémy
    • Do súborového systému OverlayFS bola pridaná podpora uchovávania hashov fs-verity v rozšírenom atribúte (xattr) overlay.verity, ktorý môže byť použitý na kontrolu integrity a autenticity súborov v spodných vrstvách OverlayFS pomocou kryptografických hashov a kľúčov. Týmto spôsobom sú v OverlayFS teraz zahrnuté všetky zmeny potrebné pre projekt Composefs, aby mohol fungovať ako nadstavba nad súborovým systémom OverlayFS a EROFS.
    • V súborovom systéme XFS bola vykonaná príprava na implementáciu možnosti použitia utilitky fsck na kontrolu a opravu zistených problémov v online režime, bez odpojenia súborového systému. Okrem toho v XFS bola implementovaná možnosť používania veľkých foliantov (folios) v stránkovom cache a boli pridané niektoré súvisiace optimalizácie, ktoré výrazne zvýšili výkon pre niektoré typy záťaže.
    • Do súborového systému tmpfs bola pridaná podpora používateľských rozšírených atribútov (user xattrs), priameho vstupu/výstupu a kvót viazaných na používateľa a skupinu. Stabilizovali sa posuny na adresáre, čo vyriešilo problémy s exportom tmpfs cez NFS.
    • Do API na správu montovania bol pre zvýšenie bezpečnosti pridaný flag FSCONFIG_CMD_CREATE_EXCL, ktorý zakazuje zdieľanie superbloku na viacerých montážnych bodoch (zakazuje pripojenie jedného oddielu na niekoľko montážnych bodov). V utilite mount bola na povolenie tohto flagu navrhnutá možnosť "--exclusive".
    • Do subsystému VFS bola pridaná podpora okamžitej zmeny parametrov s časom prístupu a zmeny (atime, mtime). Predtým boli údaje o čase odrážané s určitou oneskorením, čo bránilo sledovaniu aktuálnosti údajov v cache v systémoch podobných NFS (v dôsledku oneskorenia pri určení zmien v súbore mohla systém mylne považovať, že údaje v cache sú aktuálne). Nová funkcia je dostupná pre Btrfs, Ext4, tmpfs a XFS.
    • V Btrfs bol vyhlásený za zastaraný integrovaný mechanizmus kontroly integrity, ktorý sa zapínal v štádiu zostavovania cez parameter BTRFS_FS_CHECK_INTEGRITY. Uvedený mechanizmus zostal bez podpory, viac sa netestuje a vytvára dodatočnú záťaž na CPU a pamäť. Okrem toho bola v Btrfs optimalizovaná výkonnosť nového kódu na kontrolu súborového systému (scrub).
    • V súborovom systéme Ext4 boli pridané periodické kontroly aktualizácie superbloku a zrýchlené operácie prideľovania pamäte pri zápise na koniec súboru.
    • Do subsystému FUSE bola pridaná podpora atribútu btime ("čas vzniku"), ktorý určuje čas vytvorenia inódu.
    • Zmeny oprávnení prístupu pre symbolické odkazy sú zakázané.
    • Bol pridaný systémový hovor fchmodat2(), ktorý sa od systémového hovoru fchmodat() líši ďalším argumentom pre určenie príznakov. Z príznakov sú zatiaľ podporované len AT_SYMLINK_NOFOLLOW a AT_EMPTY_PATH, čo umožňuje realizovať v libc-funkcii fchmodat() zákaz dereferencovania symbolických odkazov a možnosť používať súborový deskriptor pri zadávaní prázdnej cesty bez obchádzok.
    • V súborovom systéme EROFS (Extendable Read-Only File System), určenom na použitie na oddieloch dostupných v režime iba na čítanie, bola pridaná podpora kompresného algoritmu Deflate. Pre zrýchlenie vyhľadávania rozšírených atribútov bola použitá pravdepodobnostná štruktúra bloom filter.
    • Bol pridaný parameter CONFIG_BUFFER_HEAD, ktorý umožňuje zložiť jadro bez použitia štruktúry buffer_head. Pri zostavení bez buffer_head je možné používať blokové zariadenia a niektoré FS, ako napríklad xfs, btrfs, cramfs, erofs a squashfs.
    • Do ovládača blokových zariadení ublk, ktorý umožňuje presunúť špecifickú logiku na stranu procesu v používateľskom priestore, bola pridaná podpora zónovaných úložných zariadení (rozdelenie na zóny skupín blokov alebo sektorov, do ktorých je povolené len sekvenčné pridávanie údajov s aktualizáciou celej skupiny blokov).
    • Implementácia súborového systému ReiserFS bola prevedená z kategórie podporovaných do kategórie zastaraných (Obsolete). Ukončenie podpory ReiserFS je naplánované na rok 2025. Ako dôvod prevodu ReiserFS medzi zastarané je spomenutá stagnácia v údržbe tohto FS, nevyriešený problém roku 2038, absencia možností zaisťujúcich odolnosť voči zlyhaniu a snaha znížiť náklady na údržbu zmien spoločných pre súborové systémy, týkajúcich sa podpory nového API pre mountovanie, iomap a folios.
    • V NFS serveri bol implementovaný mechanizmus delegovania zápisových operácií pre NFSv4, ktorý zvyšuje efektivitu cacheovania zápisu súborov na zníženie prevádzky. B bola zahrnutá podpora operácie READ_PLUS, definovanej v NFS 4.2.
    • Do súborového systému Ceph bola pridaná podpora fscrypt.
  • Virtualizácia a bezpečnosť
    • Bola pridaná implementácia mechanizmu Shadow Stack, ktorý umožňuje blokovať fungovanie mnohých exploitov, pričom využíva hardvérové možnosti procesorov Intel na ochranu pred prepísaním návratovej adresy funkcie v prípade pretečenia zásobníka. Podstatou ochrany je, že po odovzdaní riadenia funkcii sa návratová adresa ukladá procesorom nielen do bežného zásobníka, ale aj do samostatného „tieňového“ zásobníka, ktorý nemôže byť priamo upravený. Pred opustením funkcie sa návratová adresa vyťahuje z tieňového zásobníka a porovnáva sa s návratovou adresou z hlavného zásobníka. Rozdiel v adresách vedie k vygenerovaniu výnimky, ktorá blokuje situácie, keď sa exploitovi podarilo prepísať adresu v hlavnom zásobníku. Hardvérový tieňový zásobník je podporovaný len v 64-bitových zostaveniach, zatiaľ čo v 32-bitových zostaveniach sa používa jeho softvérová emulácia.
    • Bola pridaná podpora zostavenia s kompilátorom Clang s povoleným režimom ochrany CFI (Control Flow Integrity), ktorý blokuje porušenia normálneho poradia vykonávania (control flow) v dôsledku používania exploitov, ktoré menia uložené v pamäti ukazovatele na funkcie.
    • Pre architektúru RISC-V bola pridaná randomizácia umiestnenia jadra v pamäti pri načítaní.
    • Do systémového volania seccomp() bola pridaná frakcia SECCOMP_USER_NOTIF_FD_SYNC_WAKE_UP, ktorá umožňuje spracovávať udalosti z monitorovaných procesov v synchronnom režime na efektívnejšiu prácu plánovača úloh.
    • Vo funkcii kmalloc() bola zabezpečená randomizácia slab-cache-ov, čo sťažuje zneužívanie zraniteľností v jadre.
    • Z možností spojených s povolením systému vynúteného prístupu SELinux bola odstránená zmienka o Agentúre národnej bezpečnosti USA. Keďže projekt sa už 20 rokov rozvíja pod záštitou komunity a je podporovaný nezávislými údržbármi, rozhodlo sa prejsť na používanie názvu „SELinux“ namiesto „NSA SELinux“ v komentároch a dokumentácii v Kconfig (napríklad vysvetlenie k zostavovaciemu parametru SECURITY_SELINUX bolo zmenené z „Podpora NSA SELinux“ na „Podpora SELinux“).
    • Do systémového volania userfaultfd() bola pridaná operácia UFFDIO_POISON, ktorá umožňuje označiť stránky pamäte za „otrávené“ (poisoned), čo môže byť použité na presun poškodených stránok pamäte pri migrácii virtuálních strojů z jedného systému na druhý.
    • Do subsystému VFIO bol pridaný nový symbolický rozhranie (/dev/vfio/devices/vfioX) na správu zariadení VFIO, ktoré umožňuje používateľovi priamo otvoriť súbor so zariadením bez nutnosti žiadať staré skupinové rozhranie /dev/vfio/$groupID.
    • V serveri NFS ukončila podporu zastaraných typov šifrovania Kerberos používajúcich algoritmy DES a 3DES.
    • Pri spustení v prostredí hypervízora Hyper-V bola pridaná podpora hostiteľských systémov chránených technológiou AMD SEV-SNP (Secure Nested Paging) a Intel TDX (Trusted Domain Extensions).
    • Pri kompilácii jadra v režime "W=1" sú v predvolenom kompilátore povolené varovania "-Wformat-overflow", "-Wformat-truncation", "-Wstringop-overflow" a "-Wrestrict". Pre akúkoľvek kompiláciu je povolené varovanie "-Wenum-conversion".
  • Sieťový subsystém
    • Implementácia rodiny adries AF_XDP (eXpress Data Path) bola rozšírená o možnosť spracovania paketov uložených v niekoľkých búferoch (napríklad v jednom búfere môže byť hlavička paketu a v druhom dáta, alebo v reťazci niekoľkých búferov môžu byť umiestnené veľké jumbo-rámy Ethernet). Programy využívajúce sokety AF_XDP teraz môžu prijímať a prenášať pakety priamo z viacerých búferov.
    • Do subsystému BPF bola pridaná podpora defragmentácie paketov IPv4 a IPv6, ako aj možnosť filtrovania fragmentovaných paketov.
    • V BPF bol pridaný nový spracovateľ update_socket_protocol, ktorý umožňuje programom BPF meniť požadovaný protokol pre nové sokety. Napríklad program BPF môže transparentne nahradiť protokol TCP za MPTCP (multipath TCP) s cieľom optimalizácie prenosu údajov aplikácie. V BPF bola tiež pridaná podpora správy smerovania paketov cez rôzne prúdy v MPTCP.
    • Z modulu ksmbd, ktorý ponúka fungujúcu implementáciu súborového servera na úrovni jadra založenú na protokole SMB3, bol odstránený znakom experimentálneho vývoja. Bola pridaná podpora zlúčenia operácií čítania (žiadosti "read compound").
  • Zariadenie
    • Do subsystému DRM (Direct Rendering Manager) boli zapracované zmeny potrebné na efektívnu prácu s otvoreným ovládačom NVK a implementáciou grafického API Vulkan pre grafické karty NVIDIA. Pôvodne bol ovládač DRM Nouveau navrhnutý na implementáciu OpenGL, takže mu chýbajú primitívy potrebné na efektívnu prácu ovládačov Vulkan, ako je podpora synchronizovaných objektov a správa virtuálneho adresného priestoru.
    • V ovládači AMDGPU bola implementovaná podpora SDMA 6.1.0, HDP 6.1, SMUIO 14.0, PSP 14.0, IH 6.1 a GFX 9.4.3. Kód na nahrávanie firmvéru PSP (Platform Security Processor) bol prepracovaný. Rozšíril sa podpora technológie adaptívnej synchronizácie FreeSync (bola pridaná podpora Freesync Panel Replay V2).
    • Vo ovládači i915 bola pokračovaná implementácia podpory čipov Intel Meteor Lake. Vylepšila sa podpora technológie ochrany pred kopírovaním HDCP (High-bandwidth Digital Content Protection). Kód na interakciu s displejom bol prepracovaný.
    • Možnosti zakázania nahrávania mikrokódu v Kconfig, MICROCODE_INTEL a MICROCODE_AMD, boli odstránené. Jadrový systém sa teraz vždy zostavuje s kódom na nahrávanie mikrokódu pre systémy x86, ale skutočné nahrávanie mikrokódu sa dá zakázať parametrom jadra 'dis_ucode_ldr'.
    • Do zvukového subsystému bola pridaná možnosť správy zvukových zariadení pripojených prostredníctvom subsystému IIO (Industrial I/O).
    • Bola pridaná podpora zvukových rozhraní Intel LunarLake, Intel ArrowLake a AMD ACP5x, kodekov Cirrus Logic CS42L43, Realtek RT1017 a TI TAS2781, ako aj zosilňovačov Cirrus Logic CS35L56 a winic aw88261. Bolo pridané aj podpora ASoC AMD Van Gogh.
    • Bol pridaný ovládač USB MIDI 2.0 Gadget, ktorý emuluje rozhranie USB MIDI 2.0 viazané na zariadenie ALSA UMP rawmidi.
    • Bola pridaná podpora Ethernetových kontrolérov Broadcom ASP 2.0 a Marvell 88Q2XXX.
    • Bola pridaná podpora panelov Visionox R66451, TDO TL050HDV35, KD070FHFID015, Inanbo T28CP45TN89 a EDT ET028013DMA, ovládačov displeja Loongson a ovládačov dotykových obrazoviek Azoteq IQS7222D/IQS7210A/7211A.
    • Bola pridaná podpora ARM SoC Qualcomm SM4450 (Snapdragon 4 Gen 2), TI AM62P5, Intel Agilex5, Qualcomm ipq5018, AN400 (Amlogic T7).
    • Bola pridaná podpora ARM platforiem Samsung Galaxy Tab 3 8.0, FriendlyElec NanoPC T6, Amlogic A311D2, Khadas Vim4, Xiaomi SM7125, Facebook Yosemite 4, Orange Pi Zero 3, Radxa ROCK 4SE.

Súčasne latinskoamerická Nadácia slobody softvéru vytvorila alternatívu úplne slobodného jadra 6.6 – Linux-libre 6.6-gnu, ktorá bola vyčistená od prvkov firmvéru a ovládačov obsahujúcich neslobodné komponenty alebo úseky kódu, ktorých použitie je obmedzené výrobcom. V vydaní 6.6 bol aktualizovaný kód čistenia blobov v rôznych ovládačoch a subsystémoch, napríklad v ovládačoch TI gigabit RU ethernet, MediaTek 792x wifi, Cirrus Logic cs42l43 mfd, cs35l56 HD-audio a aw88261 SoC. Bolo vykonané čistenie názvov blobov v dts súboroch pre architektúru Aarch64. Bloby boli odstránené v nových ovládačoch ivpu, v bluetooth ovládačoch, v ovládači pre dotykové obrazovky a v kódovači/dekodovači Qualcomm Venus V4L2.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster