Izdaja jedra Linuxa 6.2

Po dveh mesecih razvoja je Linus Torvalds predstavil izdajo jedra Linux 6.2. Med najbolj opaznimi spremembami: dovoljeno je sprejemanje kode pod licenco Copyleft-Next, izboljšana je implementacija RAID5/6 v Btrfs, nadaljuje se integracija podpore za jezik Rust, zmanjšani so stroški zaščite pred napadi Retbleed, dodana je zmožnost uravnavanja porabe pomnilnika med povratnim pisanjem, dodan je mehanizem za uravnoteženje TCP PLB (Protective Load Balancing), dodan je mehanizem za zaščito hibridnega toka ukazov (FineIBT), BPF ima zdaj možnost definiranja lastnih objektov in podatkovnih struktur , vključen je pripomoček rv (Runtime Verification), poraba energije pri implementaciji RCU ključavnic je zmanjšana.

Nova različica vključuje 16843 popravkov 2178 razvijalcev, velikost popravka je 62 MB (spremembe so vplivale na 14108 datotek, dodanih je bilo 730195 vrstic kode, izbrisanih je bilo 409485 vrstic). Približno 42 % vseh sprememb, uvedenih v 6.2, je povezanih z gonilniki naprav, približno 16 % sprememb je povezanih s posodabljanjem kode, specifične za arhitekture strojne opreme, 12 % je povezanih z omrežnim skladom, 4 % je povezanih z datotečnimi sistemi in 3 % so povezani z notranjimi podsistemi jedra.

Glavne novosti v jedru 6.2:

  • Pomnilniške in sistemske storitve
    • Dovoljeno je vključiti v kodo jedra in spremembe, ki so na voljo pod licenco Copyleft-Next 0.3.1. Licenco Copyleft-Next je ustvaril eden od avtorjev GPLv3 in je popolnoma združljiva z licenco GPLv2, kot so potrdili odvetniki iz SUSE in Red Hat. Licenca Copyleft-Next je v primerjavi z GPLv2 veliko bolj kompaktna in razumljiva (odstranjen je uvodni del in omemba zastarelih kompromisov), določa časovni okvir in postopek za odpravo kršitev ter samodejno odpravlja zahteve copyleft za zastarelo programsko opremo, ki je star več kot 15 let.

      Copyleft-Next vsebuje tudi klavzulo o odobritvi lastniške tehnologije, ki za razliko od GPLv2 naredi to licenco združljivo z licenco Apache 2.0. Da bi zagotovili popolno združljivost z GPLv2, Copyleft-Next izrecno navaja, da se lahko pod licenco GPL poleg izvirne licence Copyleft-Next zagotovi tudi izpeljano delo.

    • Struktura vključuje pripomoček »rv«, ki zagotavlja vmesnik za interakcijo iz uporabniškega prostora z upravljalci podsistema RV (Runtime Verification), ki je namenjen preverjanju pravilnega delovanja visoko zanesljivih sistemov, ki zagotavljajo odsotnost napak. Preverjanje se izvede v času izvajanja s pritrditvijo upravljavcev na točke sledenja, ki preverjajo dejanski napredek izvajanja glede na vnaprej določen referenčni deterministični model stroja, ki definira pričakovano vedenje sistema.
    • Naprava zRAM, ki omogoča shranjevanje izmenjalne particije v pomnilnik v stisnjeni obliki (v pomnilniku se ustvari blokovna naprava, v katero se izvede zamenjava s stiskanjem), implementira možnost prepakiranja strani z uporabo alternativnega algoritma za doseganje višje ravni kompresije. Glavna ideja je omogočiti izbiro med več algoritmi (lzo, lzo-rle, lz4, lz4hc, zstd), ki ponujajo lastne kompromise med hitrostjo kompresije/dekompresije in stopnjo kompresije ali optimalne v posebnih situacijah (na primer za stiskanje velikih pomnilniške strani).
    • Dodan API "iommufd" za upravljanje sistema za upravljanje V/I pomnilnika - IOMMU (I/O Memory-Management Unit) iz uporabniškega prostora. Novi API omogoča upravljanje tabel V/I pomnilniških strani z uporabo deskriptorjev datotek.
    • BPF nudi možnost ustvarjanja tipov, definiranja lastnih objektov, gradnje lastne hierarhije objektov in prilagodljivega ustvarjanja lastnih podatkovnih struktur, kot so povezani seznami. Za programe BPF, ki gredo v način mirovanja (BPF_F_SLEEPABLE), je bila dodana podpora za zaklepanja bpf_rcu_read_{,un}lock(). Implementirana podpora za shranjevanje objektov task_struct. Dodana vrsta zemljevida BPF_MAP_TYPE_CGRP_STORAGE, ki zagotavlja lokalno shranjevanje za skupine c.
    • Za mehanizem blokiranja RCU (Read-copy-update) je implementiran izbirni mehanizem "lenih" povratnih klicev, pri katerem se več klicev povratnih klicev obdela hkrati s časovnikom v paketnem načinu. Uporaba predlagane optimizacije nam omogoča zmanjšanje porabe energije v napravah Android in ChromeOS za 5-10 % s preložitvijo zahtev RCU v času mirovanja ali nizke obremenitve sistema.
    • Dodan sysctl split_lock_mitigate za nadzor nad tem, kako se sistem odzove, ko zazna deljene ključavnice, do katerih pride pri dostopu do neporavnanih podatkov v pomnilniku, ker podatki med izvajanjem atomskega ukaza prečkajo dve vrstici predpomnilnika CPU. Takšne blokade vodijo do občutnega padca delovanja. Nastavitev split_lock_mitigate na 0 samo izda opozorilo, da obstaja težava, medtem ko nastavitev split_lock_mitigate na 1 povzroči tudi upočasnitev procesa, ki je povzročil zaklepanje, da se ohrani zmogljivost preostalega sistema.
    • Za arhitekturo PowerPC je bila predlagana nova implementacija qspinlock, ki prikazuje višjo zmogljivost in rešuje nekatere težave z zaklepanjem, ki se pojavijo v izjemnih primerih.
    • Koda za obravnavanje prekinitev MSI (Message-Signaled Interrupts) je bila predelana, odpravlja nakopičene arhitekturne težave in dodaja podporo za vezavo posameznih upravljavcev na različne naprave.
    • Za sisteme, ki temeljijo na arhitekturi nabora ukazov LoongArch, ki se uporablja v procesorjih Loongson 3 5000 in izvajajo nov RISC ISA, podoben MIPS in RISC-V, je implementirana podpora za ftrace, zaščito sklada, način spanja in pripravljenosti.
    • Zagotovljena je bila možnost dodeljevanja imen področjem skupnega anonimnega pomnilnika (prej je bilo mogoče imena dodeliti samo zasebnemu anonimnemu pomnilniku, dodeljenemu določenemu procesu).
    • Dodan nov parameter ukazne vrstice jedra »trace_trigger«, zasnovan za aktiviranje sprožilca sledenja, ki se uporablja za povezovanje pogojnih ukazov, ki se kličejo, ko se sproži preverjanje nadzora (na primer trace_trigger=”sched_switch.stacktrace if prev_state == 2″).
    • Zahteve za različico paketa binutils so povečane. Gradnja jedra zdaj zahteva vsaj binutils 2.25.
    • Pri klicu exec() je dodana možnost umestitve procesa v časovni imenski prostor, v katerem se čas razlikuje od sistemskega časa.
    • Začeli smo prenašati dodatno funkcionalnost iz veje Rust-for-Linux, povezano z uporabo jezika Rust kot drugega jezika za razvoj gonilnikov in modulov jedra. Podpora za Rust je privzeto onemogočena in ne pomeni, da je Rust vključen kot zahtevana odvisnost gradnje jedra. Osnovna funkcionalnost, ponujena v zadnji izdaji, je razširjena tako, da podpira kodo nizke ravni, kot so tip Vec in makri pr_debug!(), pr_cont!() in pr_alert!(), kot tudi proceduralni makro “#[vtable ]«, ki poenostavlja delo s kazalnimi tabelami na funkcijah. V prihodnjih izdajah se pričakuje dodajanje visokonivojskih povezav Rust preko podsistemov jedra, ki bodo omogočili ustvarjanje polnopravnih gonilnikov v Rustu.
    • Vrsta "char", ki se uporablja v jedru, je zdaj privzeto deklarirana kot nepodpisana za vse arhitekture.
    • Mehanizem za dodeljevanje pomnilnika plošč - SLOB (slab allocator), ki je bil zasnovan za sisteme z majhno količino pomnilnika, je bil razglašen za zastarelega. Namesto SLOB je v normalnih pogojih priporočljiva uporaba SLUB ali SLAB. Za sisteme z majhno količino pomnilnika je priporočljiva uporaba SLUB v načinu SLUB_TINY.
  • Diskovni podsistem, V/I in datotečni sistemi
    • V Btrfs so bile narejene izboljšave, katerih cilj je odpraviti težavo "luknje za pisanje" v izvedbah RAID 5/6 (poskus obnovitve RAID, če med pisanjem pride do zrušitve in je nemogoče razumeti, kateri blok, na kateri napravi RAID je bil pravilno zapisan, kar lahko privede do uničenja blokov, ki ustrezajo zavarovanim blokom). Poleg tega diski SSD zdaj privzeto samodejno omogočijo asinhrono operacijo zavrženja, ko je to mogoče, kar omogoča izboljšano zmogljivost zaradi učinkovitega združevanja operacij zavrženja v čakalne vrste in obdelave čakalne vrste s procesorjem v ozadju. Izboljšano delovanje operacij pošiljanja in iskanja ter ioctl FIEMAP.
    • Razširjene so zmožnosti upravljanja odloženega pisanja (povratno pisanje, shranjevanje spremenjenih podatkov v ozadju) za blok naprave. V nekaterih situacijah, na primer pri uporabi omrežnih blokirnih naprav ali pogonov USB, lahko leno pisanje povzroči veliko porabo RAM-a. Da bi nadzorovali obnašanje lenih zapisov in ohranili velikost predpomnilnika strani znotraj določenih meja, so bili v sysfs (/sys/class/bdi/) uvedeni novi parametri strict_limit, min_bytes, max_bytes, min_ratio_fine in max_ratio_fine.
    • Datotečni sistem F2FS izvaja operacijo atomske zamenjave ioctl, ki vam omogoča pisanje podatkov v datoteko znotraj ene atomske operacije. F2FS doda tudi predpomnilnik obsega blokov za pomoč pri identifikaciji aktivno uporabljenih podatkov ali podatkov, do katerih že dolgo niste dostopali.
    • V FS ext4 so zabeleženi samo popravki napak.
    • Datotečni sistem ntfs3 ponuja več novih možnosti priklopa: »nocase« za nadzor občutljivosti velikih in malih črk v imenih datotek in imenikov; windows_name za prepoved ustvarjanja imen datotek, ki vsebujejo znake, ki niso veljavni za Windows; hide_dot_files za nadzor dodelitve oznake skrite datoteke za datoteke, ki se začnejo s piko.
    • Datotečni sistem Squashfs izvaja možnost priklopa »threads=«, ki vam omogoča, da določite število niti za vzporedno izvajanje operacij dekompresije. Squashfs je predstavil tudi zmožnost preslikave ID-jev uporabnikov nameščenih datotečnih sistemov, ki se uporabljajo za ujemanje datotek določenega uporabnika na nameščeni tuji particiji z drugim uporabnikom v trenutnem sistemu.
    • Implementacija seznamov za nadzor dostopa POSIX (POSIX ACL) je bila predelana. Nova implementacija odpravlja arhitekturne težave, poenostavlja vzdrževanje kodne baze in uvaja varnejše vrste podatkov.
    • Podsistemu fscrypt, ki se uporablja za transparentno šifriranje datotek in imenikov, je dodana podpora za šifrirni algoritem SM4 (kitajski standard GB/T 32907-2016).
    • Zagotovljena je bila možnost gradnje jedra brez podpore za NFSv2 (v prihodnosti nameravajo popolnoma prenehati podpirati NFSv2).
    • Organizacija preverjanja pravic dostopa do naprav NVMe je bila spremenjena. Omogoča branje in pisanje v napravo NVMe, če ima proces pisanja dostop do namenske datoteke naprave (prej je moral imeti proces dovoljenje CAP_SYS_ADMIN).
    • Odstranjen gonilnik paketa CD/DVD, ki je bil leta 2016 opuščen.
  • Virtualizacija in varnost
    • V procesorje Intel in AMD je bil implementiran nov način zaščite pred ranljivostjo Retbleed z uporabo sledenja globine klicev, ki ne upočasni dela toliko kot prej prisotna zaščita pred Retbleed. Za omogočanje novega načina je bil predlagan parameter ukazne vrstice jedra “retbleed=stuff”.
    • Dodan hibridni mehanizem za zaščito pretoka ukazov FineIBT, ki združuje uporabo navodil strojne opreme Intel IBT (Indirect Branch Tracking) in zaščito programske opreme kCFI (integriteta toka nadzora jedra), da blokira kršitev običajnega vrstnega reda izvajanja (pretok nadzora) kot rezultat uporabe podvigov, ki spreminjajo kazalce, shranjene v pomnilniku funkcij. FineIBT omogoča izvedbo s posrednim skokom samo v primeru skoka na ukaz ENDBR, ki je postavljen na sam začetek funkcije. Poleg tega se po analogiji z mehanizmom kCFI nato preverijo zgoščene vrednosti, da se zagotovi nespremenljivost kazalcev.
    • Dodane omejitve za blokiranje napadov, ki manipulirajo z ustvarjanjem stanj "oops", po katerih so problematične naloge dokončane in stanje obnovljeno brez zaustavitve sistema. Pri zelo velikem številu klicev v stanje "oops" pride do prekoračitve referenčnega števca (refcount), ki omogoča izkoriščanje ranljivosti, ki jih povzroči dereferenciranje kazalca NULL. Za zaščito pred takšnimi napadi je jedru dodana omejitev za največje število sprožilcev »oops«, po prekoračitvi katere bo jedro sprožilo prehod v stanje »panike«, ki mu bo sledil ponovni zagon, kar ne bo omogočilo doseganja število ponovitev, potrebnih za prekoračitev refcounta. Privzeto je omejitev nastavljena na 10 tisoč "oop", po želji pa jo lahko spremenite s parametrom oops_limit.
    • Dodan konfiguracijski parameter LEGACY_TIOCSTI in sysctl legacy_tiocsti za onemogočanje zmožnosti vnašanja podatkov v terminal z uporabo ioctl TIOCSTI, saj je to funkcionalnost mogoče uporabiti za zamenjavo poljubnih znakov v vhodnem medpomnilniku terminala in simulacijo uporabniškega vnosa.
    • Predlagana je nova vrsta notranje strukture, encoded_page, v kateri se spodnji biti kazalca uporabljajo za shranjevanje dodatnih informacij, ki se uporabljajo za zaščito pred naključnim deimenovanjem kazalca (če je deimenovanje dejansko potrebno, je treba te dodatne bite najprej počistiti) .
    • Na platformi ARM64 je v fazi zagona mogoče omogočiti ali onemogočiti programsko implementacijo mehanizma Shadow Stack, ki se uporablja za zaščito pred prepisovanjem povratnega naslova iz funkcije v primeru prekoračitve medpomnilnika na skladu ( bistvo zaščite je shranjevanje povratnega naslova v ločen "senčni" sklad po prenosu nadzora na funkcijo in pridobitev podanega naslova pred izhodom iz funkcije). Podpora za implementacije strojne in programske opreme Shadow Stack v enem sestavu jedra vam omogoča uporabo enega jedra v različnih sistemih ARM, ne glede na njihovo podporo za navodila za preverjanje pristnosti kazalca. Vključitev programske implementacije se izvede z zamenjavo potrebnih navodil v kodi med nalaganjem.
    • Dodana podpora za uporabo asinhronega mehanizma obveščanja o izhodu na Intelovih procesorjih, ki omogoča zaznavanje napadov v enem koraku na kodo, ki se izvaja v enklavah SGX.
    • Predlagan je nabor operacij, ki omogoča hipervizorju, da podpira zahteve gostujočih sistemov Intel TDX (Trusted Domain Extensions).
    • Nastavitve gradnje jedra RANDOM_TRUST_BOOTLOADER in RANDOM_TRUST_CPU so bile odstranjene v korist ustreznih možnosti ukazne vrstice random.trust_bootloader in random.trust_cpu.
    • Mehanizem Landlock, ki vam omogoča omejitev interakcije skupine procesov z zunanjim okoljem, je dodal podporo za zastavo LANDLOCK_ACCESS_FS_TRUNCATE, ki omogoča nadzor nad izvajanjem operacij obrezovanja datotek.
  • Omrežni podsistem
    • Za IPv6 je bila dodana podpora za PLB (Protective Load Balancing), mehanizem za uravnoteženje obremenitve med omrežnimi povezavami, katerega namen je zmanjšati točke preobremenitve na stikalih podatkovnih centrov. S spreminjanjem oznake pretoka IPv6 PLB naključno spremeni poti paketov, da uravnoteži obremenitev vrat stikala. Za zmanjšanje preurejanja paketov se ta operacija izvede po obdobjih mirovanja, kadar koli je to mogoče. Uporaba PLB v Googlovih podatkovnih centrih je zmanjšala neravnovesje obremenitve na vratih stikala za povprečno 60 %, zmanjšala izgubo paketov za 33 % in zmanjšala zakasnitev za 20 %.
    • Dodan gonilnik za naprave MediaTek, ki podpirajo Wi-Fi 7 (802.11be).
    • Dodana podpora za 800-gigabitne povezave.
    • Dodana je možnost sprotnega preimenovanja omrežnih vmesnikov, brez prekinitve dela.
    • Sporočilom dnevnika o poplavi SYN je bila dodana omemba naslova IP, na katerega je prispel paket.
    • Za UDP je bila uvedena možnost uporabe ločenih zgoščenih tabel za različne omrežne imenske prostore.
    • Za omrežne mostove je implementirana podpora za metodo preverjanja pristnosti MAB (MAC Authentication Bypass).
    • Za protokol CAN (CAN_RAW) je bila implementirana podpora za način vtičnice SO_MARK za priključitev prometnih filtrov, ki temeljijo na fwmark.
    • ipset implementira nov parameter bitne maske, ki vam omogoča nastavitev maske na podlagi poljubnih bitov v naslovu IP (na primer "ipset create set1 hash:ip bitmask 255.128.255.0").
    • Dodana podpora za obdelavo notranjih glav znotraj tuneliranih paketov v nf_tables.
  • Оборудование
    • Podsistem »accel« je bil dodan z implementacijo ogrodja za računalniške pospeševalnike, ki so lahko dobavljeni v obliki posameznih ASIC-jev ali v obliki blokov IP znotraj SoC in GPU. Ti pospeševalniki so namenjeni predvsem pospeševanju reševanja problemov strojnega učenja.
    • Gonilnik amdgpu vključuje podporo za komponente IP GC, PSP, SMU in NBIO. Za sisteme ARM64 je implementirana podpora za DCN (Display Core Next). Implementacija zaščitenega izpisa zaslona je bila premaknjena z uporabe DCN10 na DCN21 in se zdaj lahko uporablja pri povezovanju več zaslonov.
    • Gonilnik i915 (Intel) ima stabilizirano podporo za diskretne grafične kartice Intel Arc (DG2/Alchemist).
    • Gonilnik Nouveau podpira grafične procesorje NVIDIA GA102 (RTX 30), ki temeljijo na arhitekturi Ampere. Za kartice nva3 (GT215) je dodana možnost nadzora osvetlitve ozadja.
    • Dodana podpora za brezžične adapterje, ki temeljijo na čipih Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) in MediaTek MT7996, vmesnikih Bluetooth Broadcom BCM4377/4378/4387, kot tudi krmilnikih Motorcomm yt8521, NVIDIA Tegra GE Ethernet.
    • Dodana podpora ASoC (ALSA System on Chip) za vgrajene zvočne čipe HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. Dodana podpora za zvočni vmesnik Focusrite Saffire Pro 40. Dodan zvočni kodek Realtek RT1318.
    • Dodana podpora za pametne telefone in tablične računalnike Sony (Xperia 10 IV, 5 IV, X in X compact, OnePlus One, 3, 3T in Nord N100, Xiaomi Poco F1 in Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1.
    • Dodana podpora za ARM SoC in Apple T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460), SM6375 (Snapdragon 695) plošče , SDM670 (Snapdragon 670), MSM8976 (Snapdragon 652), MSM8956 (Snapdragon 650), RK3326 Odroid-Go/rg351, Zyxel NSA310S, InnoComm i.MX8MM, Odroid Go Ultra.

Istočasno je Latinskoameriška fundacija za prosto programsko opremo oblikovala različico popolnoma brezplačnega jedra 6.2 - Linux-libre 6.2-gnu, očiščeno elementov vdelane programske opreme in gonilnikov, ki vsebujejo lastniške komponente ali dele kode, katerih obseg je omejen z proizvajalec. Nova izdaja počisti nove madeže v gonilniku nouveau. Nalaganje blob je onemogočeno v gonilnikih mt7622, ​​​​mt7996 wifi in bcm4377 bluetooth. Očiščena imena blob v datotekah dts za arhitekturo Aarch64. Posodobljena koda za čiščenje madežev v različnih gonilnikih in podsistemih. Ustavljeno čiščenje gonilnika s5k4ecgx, ker je bil odstranjen iz jedra.

Vir: opennet.ru

Dodaj komentar