Po dveh mesecih razvoja je Linus Torvalds predstavil izdajo jedra Linux 6.6. Med najbolj opaznimi spremembami so: nova načrtovalka nalog EEVDF; mehanizem senčnega sklada za zaščito pred exploiti; podpora fs-verity v OverlayFS; izvajanje kvot in xattr v tmpfs; priprava online fsck v XFS; okrepljeno sledenje izvozu simbolov 'GPL-only'; podpora za omrežne vtičnice v io_uring; naključna dodeljevanja pomnilnika v kmalloc(); razglašena za zastare ReiserFS; v Nouveau so dodani primitivi za Vulkan gonilnik NVK.
V novo različico je bilo sprejetih 15291 popravkov od 2058 razvijalcev, velikost popravka pa je 39 MB (spremembe so se dotaknile 14844 datotek, dodanih je bilo 553359 vrstic kode, odstranjenih 284012 vrstic). V prejšnji izdaji je bilo 14674 popravkov od 2016 razvijalcev, velikost popravka pa je znašala 78 MB. Približno 44% vseh sprememb v 6.6 je povezanih z gonilniki naprav, približno 17% sprememb se nanaša na posodobitev kode, specifične za strojne arhitekture, 11% je povezano z omrežnim skladom, 4% s datotečnimi sistemi in 3% z notranjimi podsistemi jedra.
Glavne novosti v jedru 6.6:
- Pomnilnik in sistemske storitve
- Izvedena je nova načrtovalka nalog EEVDF (Earliest Eligible Virtual Deadline First), ki je zamenjala načrtovalec CFS (Completely Fair Scheduler), ki je bil dobavljen od jedra 2.6.23. Nova načrtovalka pri izbiri naslednjega procesa za prenos izvajanja upošteva procese, ki niso prejele dovolj procesorskih virov ali so prejele nedovoljeno veliko procesorskega časa. V prvem primeru se prisili prenos nadzora procesu, v drugem pa se nasprotno odloži. Stari načrtovalec CFS je za določanje procesov, ki potrebujejo posebno pozornost, uporabljal heuristiko in natančne nastavitve, medtem ko nova načrtovalka bolj očitno sledi tem procesom in ne zahteva natančnih nastavitev. Predvideva se, da bo EEVDF zmanjšal zakasnitve pri izvajanju nalog, s katerimi je imel CFS težave pri načrtovanju.
- Izvedene so spremembe v obdelavi notranjih simbolov kategorije „GPL-only“, ki so namenjene otežitvi uporabe lastniških modulov GPL prek GPL prekrivanj za obhod omejitev dostopa do pod sistemov jedra, ki dovoljujejo dostop samo kode pod GPL licenco. V funkciji symbol_get() je za lastniške module prepovedano iskanje simbolov, označenih kot GPL-only, medtem ko GPL-moduli ne bodo mogli najti simbolov, ki jih izvažajo lastniški moduli.
- Dodane so bile dodatne nastavitve delovnih čakalnih vrst (unbound workqueue) za povečanje učinkovitosti ponovnega uporabe predpomnilnika procesorja v velikih sistemih z več tretjim nivojem predpomnilnika (L3). V jedro je vključeno tudi orodje tools/workqueue/wq_dump.py za preverjanje trenutne konfiguracije delovnih čakalnih vrst.
- V pod sistem io_uring je bila dodana začetna podpora za operacije in ukaze, specifične za omrežne sokete. Dodan je sysctl io_uring_disabled za izklop io_uring na ravni celotnega sistema. V io_uring je bila prav tako znatno pospešena neposredna vnosa/izvoda (Direct I/O) v asinhronem načinu. Povečanje propustnosti in znižanje zakasnitev pri izvajanju operacij vnosa/izvoda po spremembah doseže 37%.
- Za arhitekturo PA-RISC je bil implementiran JIT kompilator za BPF.
- V nastavitev /sys/devices/system/cpu/smt/control je bila dodana podpora za numerične parametre, ki določajo število niti, dostopnih za vsako jedro CPU (prej so bila podprta samo vrednosti „on“ in „off“ za vklop in izklop podpore simetričnemu večnitenju). Novo funkcionalnost je mogoče uporabiti na nekaterih procesorjih PowerPC, ki podpirajo način vročega priključevanja simetričnega večnitenja („hotplug SMT“), za selektivno vklopitev SMT na določenih jedrih med delovanjem.
- Nadaljuje se prenos sprememb iz veje Rust-for-Linux, povezanih z uporabo jezika Rust kot drugega jezika za razvoj gonilnikov in modulov jedra (podpora za Rust ni privzeto aktivirana in ne vodi do vključitve Rust med obvezne odvisnosti za gradnjo jedra). Izveden je bil prehod na izdaje Rust 1.71.1 in bindgen 0.65.1. Uveden je tip ‘Zeroable’. Dodani sta proceduralni makros ‘paste!’ in ‘#[derive(Zeroable)]’. Zagotovljena je kompatibilnost z ‘#[pin_data]’. Dodane so funkcije inicializacije ‘{,pin_}init_array_from_fn()’ in metoda ‘{,pin_}chain’. Razširjene so možnosti modula ‘types’. V okvir enotnega testiranja kunit je bila dodana možnost zagonov testov iz dokumentacije Rust.
- Dodana je podrejna enota ‘eventfs’, ki znatno zmanjša porabo pomnilnika v sistemu sledenja, saj se znebi shranjevanja nepotrebnih struktur, ki se uporabljajo za predstavitev točk sledenja v datotečnem sistemu. Prej so se take strukture ustvarjale za vse točke sledenja, ne glede na uporabo sledenja. S pomoċjo eventfs lahko take strukture nastajajo dinamično, le med potrebo po njih.
- Razširjene so funkcionalnosti orodja perf.
- V datoteko /proc/pid/smaps je dodana informacija za diagnosticiranje učinkovitosti delovanja mehanizma združevanja identičnih pomnilniških strani (KSM, Kernel Samepage Merging).
- Odstranjen je API Frontswap, ki je omogočal postavitev particije za izmenjavo v pomnilniku, ki ga ni mogoče neposredno nasloviti in ki ne nudi operativnih informacij o razpoložljivem prostoru. Ta API je bil uporabljen le v zswap, zato je bilo odločeno, da se ta funkcionalnost neposredno uporabi v zswap in se znebimo odvečnih plasti.
- Za arhitekturo RISC-V je dodana podpora za dostop do števcov uspešnosti iz prostora uporabnika in možnost shranjevanja jedrnega izpisa po napaki na območju zunaj 4GB.
- Dodana je začetna podpora za ukaze ARM SME (Scalable Matrix Extension).
- Izvedena je možnost uporabe orodij za odpravljanje napak KDB, KGDB, kcov, KFENCE in KASAN na sistemih z arhitekturo LoongArch.
- Dodana je podpora za datoteke za testiranje jedra v sistemu neprekinjene integracije GitLab, ki se uporablja pri razvoju grafičnih gonilnikov.
- Дисковая подсистема, ввод/вывод и файловые системы
- V sistemu datotek OverlayFS je bila dodana podpora za shranjevanje hashev fs-verity v razširjeni atribut (xattr) overlay.verity, kar lahko uporabimo za preverjanje celovitosti in pristnosti datotek v spodnjih plasteh OverlayFS s pomočjo kriptografskih hashev in ključev. Tako je v OverlayFS sedaj vključena vsa potrebna sprememba za delovanje projekta Composefs kot nadgradnje nad datotečnim sistemom OverlayFS in EROFS.
- V datotečnem sistemu XFS je bila izvedena priprava za implementacijo možnosti uporabe pripomočka fsck za preverjanje in odpravljanje težav v načinu online, brez odmountanja datotečnega sistema. Poleg tega je bila v XFS uvedena možnost uporabe velikih folios v straničnem predpomnilniku ter dodane nekatere povezane optimizacije, ki so znatno povečale zmogljivost za nekatere vrste obremenitev.
- V datotečnem sistemu tmpfs je bila dodana podpora za uporabniške razširjene atribute (user xattrs), neposredno vhod/izhod in kvote, povezane z uporabnikoma in skupinami. Stabilizirane so bile ofsetne vrednosti za imenike, kar je odpravilo težave z izvozom tmpfs preko NFS.
- V API-ju za upravljanje z montažo je bila za povečanje varnosti dodana možnost FSCONFIG_CMD_CREATE_EXCL, ki prepoveduje skupno rabo superbloka na več montažnih točkah (prepoveduje pritrditev ene particije na več montažnih točk). V pripomočku mount je bila za aktivacijo te možnosti predlagana možnost "--exclusive".
- V podsklop VFS je bila dodana podpora za dinamično spremembo parametrov časa dostopa in spremembe (atime, mtime). Prej so se podatki o času odražali z določeno zamudo, kar je otežilo sledenje aktualnosti podatkov v predpomnilniku v sistemih, kot je NFS (zaradi zamude pri ugotavljanju sprememb v datoteki bi sistem lahko napačno ocenjeval, da so podatki v predpomnilniku aktualni). Nova možnost je na voljo za Btrfs, Ext4, tmpfs in XFS.
- V Btrfs je bil zastaral vgrajeni mehanizem za preverjanje celovitosti, ki se je vklapljal med postopkom sestavljanja preko parametra BTRFS_FS_CHECK_INTEGRITY. Ta mehanizem ni več vzdrževan, se ne testira več in povzroča dodatno obremenitev na CPU in pomnilniku. Poleg tega je bila v Btrfs optimizirana zmogljivost novega kodeksa za preverjanje FS (scrub).
- V datotečnem sistemu Ext4 so dodani periodični pregledi za posodabljanje superbloka in pospešeni postopki dodeljevanja pomnilnika pri ponovnem zapisovanju na konec datoteke.
- V podsistem FUSE je bila dodana podpora za atribut btime ("čas rojstva"), ki določa čas ustvarjanja inode-a.
- Sprememba dostopnih pravic za simbolične povezave je prepovedana.
- Dodana je sistemska klica fchmodat2(), ki se od klica fchmodat() razlikuje po dodatnem argumentu, ki določa zastavice. Podprte so le AT_SYMLINK_NOFOLLOW in AT_EMPTY_PATH, ki omogočajo brez obhodov implementacijo v libc-funkciji fchmodat(), prepoved razdere simboličnih povezav in možnost uporabe datotečnega deskriptorja pri navedbi prazne poti.
- V datotečnem sistemu EROFS (Razširljiv datotečni sistem samo za branje), namenjenem za uporabo na particijah, ki so dostopne v načinu samo za branje, je bila dodana podpora za algoritem stiskanja Deflate. Za pospešitev iskanja razširjenih atributov je bila vključena verjetnostna struktura bloom filter.
- Dodana je nastavitev CONFIG_BUFFER_HEAD, ki omogoča sestavljanje jedra brez uporabe strukture buffer_head. Pri sestavljanju brez buffer_head je mogoče uporabljati blokovne naprave in nekatere datotečne sisteme, kot so xfs, btrfs, cramfs, erofs in squashfs.
- V gonilniku blokovnih naprav ublk, ki omogoča premik specifične logike na stran procesa v uporabniškem prostoru, je bila dodana podpora za zoni shranjevanja (ločevanje v cone skupin blokov ali sektorjev, kamor je dovoljeno le zaporedno dodajanje podatkov z posodobitvijo celotne skupine blokov).
- Izvedba datotečnega sistema ReiserFS je bila preklasificirana iz kategorije podprtih v razred zastare (Obsolete). Prekinitev podpore za ReiserFS je predvidena za leto 2025. Kot razlog za preklasifikacijo ReiserFS v razred zastare se navaja stagnacija pri vzdrževanju tega FS, nerešena težava leta 2038, pomanjkanje zmogljivosti za zagotavljanje odpornosti in želja po zmanjšanju delovnih stroškov pri vzdrževanju skupnih sprememb za datotečne sisteme, povezanih s podporo novega API za montiranje, iomap in folios.
- V NFS strežniku je bil implementiran mehanizem delegiranja operacij zapisovanja za NFSv4, ki povečuje učinkovitost predpomnjenja zapisov datotek za zmanjšanje prometa. Vključena je podpora za operacijo READ_PLUS, določeno v NFS 4.2.
- V datotečni sistem Ceph je bila dodana podpora za fscrypt.
- Virtualizacija in varnost
- Implementiran je mehanizem Shadow Stack, ki omogoča blokiranje delovanja mnogih eksploitev z uporabo strojne opreme procesorjev Intel za zaščito pred prepisovanjem naslova vrnitve iz funkcije v primeru prelivanja pomnilnika na stacku. Osnova zaščite je ta, da po prenosu nadzora funkciji procesor ne shranjuje naslovov vrnitve le v običajnem stacku, temveč tudi v posebnem "senčnem" stacku, ki ga ni mogoče neposredno spremeniti. Pred izhodom iz funkcije se naslov vrnitve izlušči iz senčnega stacka in primerja z naslovom vrnitve iz glavnega stacka. Neusklajenost naslovov privede do generiranja izjeme, ki blokira situacije, ko eksploitu uspe prepisati naslov v glavnem stacku. Strojni senčni stack je podprt samo v 64-bitnih gradnjah, medtem ko se pri 32-bitnih gradnjah uporablja programska emulacija.
- Dodana je podpora za gradnjo s prevajalnikom Clang s vključenim načinom zaščite CFI (Control Flow Integrity), ki blokira kršitve običajnega zaporedja izvajanja (control flow) zaradi uporabe eksploitev, ki spreminjajo shranjene v pomnilniku kazalce na funkcije.
- Za arhitekturo RISC-V je vključena naključna razporeditev jedra v pomnilniku ob nalaganju.
- V sistemski klic seccomp() je bila dodana zastavica SECCOMP_USER_NOTIF_FD_SYNC_WAKE_UP, ki omogoča obdelavo dogodkov iz spremljanih procesov v sinhronem načinu za bolj učinkovito delovanje razporejevalnika nalog.
- V funkciji kmalloc() je zagotovljena naključna razporeditev slab cache-ev, kar oteži izkoriščanje ranljivosti v jedru.
- Iz možnosti, povezanih z vključitvijo sistema prisilne kontrole dostopa SELinux, je bilo odstranitev omembo Nacionalne varnostne agencije ZDA. Ker projekt že 20 let poteka pod okriljem skupnosti in ga spremljajo neodvisni vzdrževalci, so se odločili preiti na uporabo imena "SELinux" namesto "NSA SELinux" v komentarjih in dokumentaciji v Kconfig (na primer, razlago gradbenega parametra SECURITY_SELINUX so spremenili iz "NSA SELinux Support" v "SELinux Support").
- V sistemski klic userfaultfd() je bila dodana operacija UFFDIO_POISON, ki omogoča označevanje strani pomnilnika kot "strupenih" (poisoned), kar se lahko uporablja za prenos poškodovanih strani pomnilnika pri migraciji virtualnih naprav z enega sistema na drugega.
- V podsistemu VFIO dodan nov simbolni vmesnik (/dev/vfio/devices/vfioX) za upravljanje z napravami VFIO, ki uporabniku omogoča neposredno odpiranje datoteke z napravo, brez naslavljanja na zastareli skupinski vmesnik /dev/vfio/$groupID.
- V strežnikom Podpora za zastarele vrste šifriranja Kerberos, ki uporabljajo algoritme DES in 3DES, je bila ukinjena pri NFS.
- Ob zagonu v okolju hipervizorja Hyper-V je bila dodana podpora za gostinske sisteme, zaščitene s tehnologijo AMD SEV-SNP (Secure Nested Paging) in Intel TDX (Trusted Domain Extensions).
- Pri sestavljanju jedra v načinu 'W=1' so v privzeti prevajalnik vključena opozorila '-Wformat-overflow', '-Wformat-truncation', '-Wstringop-overflow' in '-Wrestrict'. Za vse sestavljene je vključeno opozorilo '-Wenum-conversion'.
- Mrežna podsistem
- Izvedba družine naslovov AF_XDP (eXpress Data Path) je razširjena z možnostjo dela s paketi, shranjenimi v večih buferih (na primer, en bufer lahko vsebuje glavo paketa, medtem ko drugi vsebuje podatke, ali pa se v verigi več buferjev lahko nahajajo veliki jumbo kaderi Ethernet). Programi, ki uporabljajo sokete AF_XDP, lahko zdaj sprejemajo in pošiljajo pakete neposredno iz več buferjev.
- V podsistem BPF je bila dodana podpora za defragmentacijo paketov IPv4 in IPv6 ter možnost filtriranja fragmentiranih paketov.
- V BPF je dodan nov obdelovalnik update_socket_protocol, ki omogoča BPF programom, da spremenijo zahtevani protokol za nove sokete. Na primer, BPF program lahko prozorno zamenja protokol TCP z MPTCP (multipath TCP) za optimizacijo prometa aplikacije. V BPF je bila dodana tudi podpora za nadzor usmerjanja paketov preko različnih tokov v MPTCP.
- Znak eksperimentalne razvojne faze je bil odstranjen z modula ksmbd, ki ponuja delujočo na ravni jedra implementacijo datotečnega strežnika na osnovi protokola SMB3. Dodana je podpora za združevanje operacij branja (poizvedbe 'read compound').
- Oprema
- V DRM-podsistem (Direct Rendering Manager) so bile uvedene spremembe, potrebne za učinkovito delovanje odprtega gonilnika NVK z implementacijo grafičnega API Vulkan za grafične kartice NVIDIA. Prvotni DRM-gonilnik Nouveau je bil zasnovan za implementacijo OpenGL, zato mu primanjkuje primitivi, potrebni za učinkovito delovanje Vulkan-gonilnikov, kot je podpora za sinhronizirane objekte in upravljanje z virtualnim naslovnim prostorom.
- V gonilniku AMDGPU je implementirana podpora za SDMA 6.1.0, HDP 6.1, SMUIO 14.0, PSP 14.0, IH 6.1 in GFX 9.4.3. Koda za nalaganje programske opreme PSP (Platform Security Processor) je bila prenovljena. Razširjena je podpora za tehnologijo prilagodljive sinhronizacije FreeSync (dodan je podpora za Freesync Panel Replay V2).
- V gonilniku i915 se nadaljuje z implementacijo podpore za čipe Intel Meteor Lake. Izboljšana je podpora za tehnologijo zaščite pred kopiranjem HDCP (High-bandwidth Digital Content Protection). Koda za interakcijo z zaslonom je bila prenovljena.
- Iz Kconfig so odstranjene možnosti za onemogočanje nalaganja mikroprograma med fazo sestavljanja — MICROCODE_INTEL in MICROCODE_AMD. Jedro se zdaj vedno sestavi s kodo za nalaganje mikroprograma za sisteme x86, dejansko nalaganje mikroprograma pa lahko onemogočite z navedbo parametra jedra 'dis_ucode_ldr'.
- V zvočni podsystem je dodana možnost upravljanja z zvočnimi napravami, povezanimi prek podsystema IIO (Industrial I/O).
- Dodana je podpora za zvočne vmesnike Intel LunarLake, Intel ArrowLake in AMD ACP5x, kodike Cirrus Logic CS42L43, Realtek RT1017 in TI TAS2781, ter ojačevalnike Cirrus Logic CS35L56 in winic aw88261. Dodana je podpora ASoC AMD Van Gogh.
- Dodano je gonilo USB MIDI 2.0 Gadget, ki emulira vmesnik USB MIDI 2.0, povezan z napravo ALSA UMP rawmidi.
- Dodana je podpora za Ethernet kontrolerje Broadcom ASP 2.0 in Marvell 88Q2XXX.
- Dodana je podpora za panele Visionox R66451, TDO TL050HDV35, KD070FHFID015, Inanbo T28CP45TN89 in EDT ET028013DMA, krmilnike zaslonov Loongson in krmilnike zaslonov na dotik Azoteq IQS7222D/IQS7210A/7211A.
- Dodana je podpora za ARM SoC Qualcomm SM4450 (Snapdragon 4 Gen 2), TI AM62P5, Intel Agilex5, Qualcomm ipq5018, AN400 (Amlogic T7).
- Dodana je podpora za ARM platforme 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.
Hkrati je latinskoameriška Fundacija prostega programja oblikovala različico povsem prostega jedra 6.6 — Linux-libre 6.6-gnu, očiščenega od elementov programske opreme in gonilnikov, ki vsebujejo nelojalne komponente ali dele kode, katerih uporabo omejuje proizvajalec. V izdaji 6.6 je bila posodobljena koda za čiščenje blobov v različnih gonilnikih in podsistemih, na primer v gonilnikih TI gigabit RU ethernet, MediaTek 792x wifi, Cirrus Logic cs42l43 mfd, cs35l56 HD-audio in aw88261 SoC. Izvedeno je bilo čiščenje imen blobov v dts datotekah za arhitekturo Aarch64. Odstranjeni so bili blobi v novih gonilnikih ivpu, v bluetooth gonilnikih, v gonilniku za zaslone na dotik in v kodirniku/dekodirniku Qualcomm Venus V4L2.
Izvor: opennet.ru
