Izdanje jezgre Linuxa 6.2

Nakon dva mjeseca razvoja, Linus Torvalds predstavio je izdanje Linux kernela 6.2. Među najznačajnijim promjenama: dopušteno je prihvaćanje koda pod licencom Copyleft-Next, poboljšana je implementacija RAID5/6 u Btrfs, nastavlja se integracija podrške za jezik Rust, smanjeni su troškovi zaštite od Retbleed napada, dodana je mogućnost reguliranja potrošnje memorije tijekom povratnog pisanja, dodan je mehanizam za TCP balansiranje PLB (Protective Load Balancing), dodan je mehanizam zaštite hibridnog protoka naredbi (FineIBT), BPF sada ima mogućnost definiranja vlastitih objekata i struktura podataka , uključen je uslužni program rv (Runtime Verification), potrošnja energije u implementaciji RCU brava je smanjena.

Nova verzija uključuje 16843 popravka od 2178 programera, veličina zakrpe je 62 MB (promjene su utjecale na 14108 datoteka, dodano je 730195 redaka koda, 409485 redaka je izbrisano). Oko 42% svih promjena uvedenih u 6.2 odnosi se na upravljačke programe uređaja, približno 16% promjena odnosi se na ažuriranje koda specifičnog za hardverske arhitekture, 12% se odnosi na mrežni stog, 4% se odnosi na datotečne sustave, a 3% povezani su s unutarnjim podsustavima jezgre.

Ključne inovacije u kernelu 6.2:

  • Memorija i usluge sustava
    • Dopušteno je uključiti u kod kernela i promjene predviđene licencom Copyleft-Next 0.3.1. Licencu Copyleft-Next kreirao je jedan od autora GPLv3 i potpuno je kompatibilna s GPLv2 licencom, što su potvrdili odvjetnici iz SUSE-a i Red Hata. U usporedbi s GPLv2, licenca Copyleft-Next puno je kompaktnija i lakša za razumijevanje (uklonjen je uvodni dio i spominjanje zastarjelih kompromisa), definira vremenski okvir i postupak za otklanjanje kršenja te automatski uklanja zahtjeve copylefta za zastarjeli softver koji ima više od 15 godina.

      Copyleft-Next također sadrži klauzulu o dodjeli vlasničke tehnologije, koja, za razliku od GPLv2, ovu licencu čini kompatibilnom s licencom Apache 2.0. Kako bi se osigurala potpuna kompatibilnost s GPLv2, Copyleft-Next izričito navodi da se izvedeno djelo može pružiti pod GPL licencom uz izvornu Copyleft-Next licencu.

    • Struktura uključuje uslužni program "rv", koji pruža sučelje za interakciju iz korisničkog prostora s rukovateljima podsustava RV (Runtime Verification), dizajniranog za provjeru ispravnosti rada na visoko pouzdanim sustavima koji jamče odsutnost kvarova. Provjera se izvodi tijekom izvođenja pričvršćivanjem rukovatelja točkama praćenja koji provjeravaju stvarni napredak izvršenja prema unaprijed određenom referentnom determinističkom modelu stroja koji definira očekivano ponašanje sustava.
    • zRAM uređaj, koji omogućuje pohranjivanje swap particije u memoriju u komprimiranom obliku (u memoriji se stvara blok uređaj na koji se vrši swap uz kompresiju), implementira mogućnost ponovnog pakiranja stranica pomoću alternativnog algoritma za postizanje više razine kompresije. Glavna ideja je omogućiti izbor između nekoliko algoritama (lzo, lzo-rle, lz4, lz4hc, zstd), nudeći vlastite kompromise između brzine kompresije/dekompresije i razine kompresije, ili optimalne u posebnim situacijama (na primjer, za komprimiranje velikih memorijske stranice).
    • Dodan API "iommufd" za upravljanje I/O sustavom upravljanja memorijom - IOMMU (I/O Memory-Management Unit) iz korisničkog prostora. Novi API omogućuje upravljanje I/O tablicama memorijskih stranica pomoću deskriptora datoteka.
    • BPF pruža mogućnost stvaranja tipova, definiranja vlastitih objekata, izgradnje vlastite hijerarhije objekata i fleksibilnog stvaranja vlastitih struktura podataka, kao što su povezani popisi. Za BPF programe koji idu u stanje mirovanja (BPF_F_SLEEPABLE), dodana je podrška za bpf_rcu_read_{,un}lock() zaključavanja. Implementirana podrška za spremanje task_struct objekata. Dodana vrsta karte BPF_MAP_TYPE_CGRP_STORAGE, pružanje lokalne pohrane za cgroups.
    • Za RCU (Read-copy-update) mehanizam blokiranja, implementiran je izborni mehanizam "lijenih" povratnih poziva, u kojem se nekoliko povratnih poziva obrađuje odjednom pomoću mjerača vremena u batch načinu rada. Primjena predložene optimizacije omogućuje nam smanjenje potrošnje energije na Android i ChromeOS uređajima za 5-10% odgađanjem RCU zahtjeva tijekom vremena mirovanja ili niskog opterećenja sustava.
    • Dodan sysctl split_lock_mitigate za kontrolu načina na koji sustav reagira kada otkrije podijeljena zaključavanja koja se javljaju prilikom pristupa neusklađenim podacima u memoriji zbog toga što podaci prelaze dvije linije CPU predmemorije prilikom izvršavanja atomske instrukcije. Takve blokade dovode do značajnog pada performansi. Postavljanje split_lock_mitigate na 0 izdaje samo upozorenje da postoji problem, dok postavljanje split_lock_mitigate na 1 također uzrokuje usporavanje procesa koji je uzrokovao zaključavanje kako bi se sačuvale performanse za ostatak sustava.
    • Predložena je nova implementacija qspinlock za PowerPC arhitekturu, koja pokazuje veću izvedbu i rješava neke probleme zaključavanja koji se javljaju u iznimnim slučajevima.
    • MSI (Message-Signaled Interrupts) kod za rukovanje prekidima je prerađen, eliminirajući nagomilane arhitektonske probleme i dodajući podršku za vezanje pojedinačnih rukovatelja na različite uređaje.
    • Za sustave koji se temelje na arhitekturi skupa instrukcija LoongArch koja se koristi u procesorima Loongson 3 5000 i koji implementiraju novi RISC ISA, sličan MIPS-u i RISC-V, implementirana je podrška za ftrace, zaštitu steka, mirovanje i pripravnost.
    • Omogućena je mogućnost dodjele imena područjima zajedničke anonimne memorije (prije su se imena mogla dodijeliti samo privatnoj anonimnoj memoriji dodijeljenoj određenom procesu).
    • Dodan je novi parametar naredbenog retka jezgre “trace_trigger”, dizajniran za aktiviranje okidača praćenja koji se koristi za vezanje uvjetnih naredbi koje se pozivaju kada se pokrene kontrolna provjera (na primjer, trace_trigger=”sched_switch.stacktrace if prev_state == 2″).
    • Povećani su zahtjevi za verziju paketa binutils. Izgradnja kernela sada zahtijeva najmanje binutils 2.25.
    • Prilikom pozivanja exec() dodana je mogućnost postavljanja procesa u vremenski prostor imena u kojem se vrijeme razlikuje od sistemskog vremena.
    • Počeli smo prenositi dodatnu funkcionalnost iz grane Rust-for-Linux koja se odnosi na korištenje jezika Rust kao drugog jezika za razvoj upravljačkih programa i modula kernela. Podrška za Rust onemogućena je prema zadanim postavkama i ne rezultira uključivanjem Rusta kao obavezne ovisnosti o izgradnji jezgre. Osnovna funkcionalnost ponuđena u posljednjem izdanju proširena je tako da podržava kod niske razine, kao što je tip Vec i makronaredbe pr_debug!(), pr_cont!() i pr_alert!(), kao i proceduralni makro "#[vtable ]”, što pojednostavljuje rad s tablicama pokazivača na funkcijama. U budućim izdanjima očekuje se dodavanje Rust veza visoke razine preko podsustava jezgre, što će omogućiti stvaranje potpunih upravljačkih programa u Rustu.
    • Tip "char" koji se koristi u kernelu sada je prema zadanim postavkama proglašen nepotpisanim za sve arhitekture.
    • Mehanizam raspodjele slabe memorije - SLOB (slab allocator), koji je dizajniran za sustave s malom količinom memorije, proglašen je zastarjelim. Umjesto SLOB-a, u normalnim uvjetima preporuča se koristiti SLUB ili SLAB. Za sustave s malom količinom memorije, preporučuje se korištenje SLUB-a u SLUB_TINY modu.
  • Diskovni podsustav, I/O i datotečni sustavi
    • U Btrfs su napravljena poboljšanja s ciljem rješavanja problema "rupe za pisanje" u implementacijama RAID 5/6 (pokušaj vraćanja RAID-a ako dođe do pada tijekom pisanja i nemoguće je razumjeti koji je blok na koji RAID uređaj ispravno zapisan, što može dovesti do uništenja bloka, što odgovara osiguranim blokovima). Osim toga, SSD-ovi sada automatski omogućuju asinkronu operaciju odbacivanja prema zadanim postavkama kada je to moguće, omogućujući poboljšane performanse zbog učinkovitog grupiranja operacija odbacivanja u redove i obradu reda čekanja od strane pozadinskog procesora. Poboljšana izvedba operacija slanja i traženja, kao i FIEMAP ioctl.
    • Proširene su mogućnosti za upravljanje odgođenim pisanjem (povratno pisanje, pozadinsko spremanje promijenjenih podataka) za blok uređaje. U nekim situacijama, primjerice pri korištenju mrežnih blok uređaja ili USB pogona, lijeno pisanje može dovesti do velike potrošnje RAM-a. Kako bi se kontroliralo ponašanje odlijepljenog pisanja i zadržala veličina predmemorije stranice unutar određenih ograničenja, novi parametri strict_limit, min_bytes, max_bytes, min_ratio_fine i max_ratio_fine uvedeni su u sysfs (/sys/class/bdi/).
    • Sustav datoteka F2FS implementira operaciju atomske zamjene ioctl, koja vam omogućuje pisanje podataka u datoteku unutar jedne atomske operacije. F2FS također dodaje predmemoriju opsega bloka kako bi lakše identificirao aktivno korištene podatke ili podatke kojima se nije pristupalo dulje vrijeme.
    • U ext4 FS-u zabilježene su samo ispravke grešaka.
    • Datotečni sustav ntfs3 nudi nekoliko novih opcija montiranja: "nocase" za kontrolu osjetljivosti na velika i mala slova u nazivima datoteka i direktorija; windows_name za zabranu stvaranja naziva datoteka koji sadrže znakove koji nisu valjani za Windows; hide_dot_files za kontrolu dodjele oznake skrivene datoteke za datoteke koje počinju s točkom.
    • Datotečni sustav Squashfs implementira opciju montiranja "threads=", koja vam omogućuje da definirate broj niti za paralelizaciju operacija dekompresije. Squashfs je također uveo mogućnost mapiranja korisničkih ID-ova montiranih datotečnih sustava, koji se koriste za usklađivanje datoteka određenog korisnika na montiranoj stranoj particiji s drugim korisnikom na trenutnom sustavu.
    • Implementacija POSIX popisa kontrole pristupa (POSIX ACL-ovi) je prerađena. Nova implementacija eliminira arhitektonske probleme, pojednostavljuje održavanje baze koda i uvodi sigurnije vrste podataka.
    • Podsustav fscrypt, koji se koristi za transparentnu enkripciju datoteka i direktorija, ima dodatnu podršku za algoritam šifriranja SM4 (kineski standard GB/T 32907-2016).
    • Omogućena je mogućnost izgradnje kernela bez podrške za NFSv2 (u budućnosti planiraju potpuno prestati podržavati NFSv2).
    • Promijenjena je organizacija provjere prava pristupa NVMe uređajima. Pruža mogućnost čitanja i pisanja na NVMe uređaj ako proces pisanja ima pristup namjenskoj datoteci uređaja (ranije je proces morao imati dozvolu CAP_SYS_ADMIN).
    • Uklonjen je upravljački program CD/DVD paketa, koji je zastario 2016.
  • Virtualizacija i sigurnost
    • U Intel i AMD procesore implementirana je nova metoda zaštite od Retbleed ranjivosti, korištenjem call dubinskog praćenja, koja ne usporava rad toliko kao dosad prisutna zaštita od Retbleeda. Kako bi se omogućio novi način rada, predložen je parametar naredbenog retka jezgre “retbleed=stuff”.
    • Dodan je hibridni FineIBT mehanizam zaštite toka instrukcija, kombinirajući upotrebu hardverskih Intel IBT (Indirect Branch Tracking) instrukcija i softverske zaštite kCFI (kernel Control Flow Integrity) za blokiranje kršenja normalnog redoslijeda izvršavanja (kontrolnog toka) kao rezultat upotrebe podviga koji mijenjaju pokazivače pohranjene u memoriji na funkcije. FineIBT dopušta izvođenje neizravnim skokom samo u slučaju skoka na instrukciju ENDBR koja se nalazi na samom početku funkcije. Dodatno, po analogiji s kCFI mehanizmom, hashovi se tada provjeravaju kako bi se zajamčila nepromjenjivost pokazivača.
    • Dodana su ograničenja za blokiranje napada koji manipuliraju generiranjem "ups" stanja, nakon čega se problematični zadaci dovršavaju i stanje se vraća bez zaustavljanja sustava. Kod vrlo velikog broja poziva u stanje "ups", dolazi do prekoračenja referentnog brojača (refcount), što omogućuje iskorištavanje ranjivosti uzrokovanih dereferenciranjem NULL pokazivača. Za zaštitu od takvih napada jezgri je dodano ograničenje za maksimalan broj okidača "ups", nakon čijeg prekoračenja jezgra će pokrenuti prijelaz u stanje "panike" nakon čega slijedi ponovno pokretanje, što neće dopustiti postizanje broj ponavljanja potrebnih za prekoračenje refcounta. Prema zadanim postavkama, ograničenje je postavljeno na 10 tisuća "oops", ali po želji se može promijeniti kroz parametar oops_limit.
    • Dodan konfiguracijski parametar LEGACY_TIOCSTI i sysctl legacy_tiocsti za onemogućavanje mogućnosti stavljanja podataka u terminal pomoću ioctl TIOCSTI, budući da se ova funkcionalnost može koristiti za zamjenu proizvoljnih znakova u ulaznom međuspremniku terminala i simulaciju korisničkog unosa.
    • Predlaže se nova vrsta interne strukture, encoded_page, u kojoj se niži bitovi pokazivača koriste za pohranjivanje dodatnih informacija koje se koriste za zaštitu od slučajnog dereferenciranja pokazivača (ako je dereferencija stvarno neophodna, ovi dodatni bitovi moraju se prvo obrisati) .
    • Na ARM64 platformi, u fazi pokretanja, moguće je omogućiti ili onemogućiti softversku implementaciju mehanizma Shadow Stack, koji se koristi za zaštitu od prepisivanja povratne adrese iz funkcije u slučaju prekoračenja međuspremnika na stogu ( bit zaštite je spremanje povratne adrese u poseban "shadow" stog nakon što se kontrola prenese na funkciju i dohvaćanje zadane adrese prije izlaska iz funkcije). Podrška za hardverske i softverske implementacije Shadow Stacka u jednom sklopu kernela omogućuje korištenje jedne jezgre na različitim ARM sustavima, bez obzira na njihovu podršku za upute za autentifikaciju pokazivača. Uključivanje softverske implementacije provodi se zamjenom potrebnih uputa u kodu tijekom učitavanja.
    • Dodana podrška za korištenje asinkronog mehanizma obavijesti o izlazu na Intelovim procesorima, koji omogućuje otkrivanje napada u jednom koraku na kod koji se izvodi u SGX enklavama.
    • Predložen je skup operacija koji omogućuje hipervizoru da podržava zahtjeve gostujućih sustava Intel TDX (Trusted Domain Extensions).
    • Postavke izrade kernela RANDOM_TRUST_BOOTLOADER i RANDOM_TRUST_CPU su uklonjene u korist odgovarajućih opcija naredbenog retka random.trust_bootloader i random.trust_cpu.
    • Mehanizam Landlock, koji vam omogućuje ograničavanje interakcije grupe procesa s vanjskim okruženjem, dodao je podršku za oznaku LANDLOCK_ACCESS_FS_TRUNCATE, koja omogućuje kontrolu izvršavanja operacija skraćivanja datoteka.
  • Mrežni podsustav
    • Za IPv6, dodana je podrška za PLB (Protective Load Balancing), mehanizam za balansiranje opterećenja između mrežnih veza s ciljem smanjenja točaka preopterećenja na preklopnicima podatkovnog centra. Promjenom oznake protoka IPv6, PLB nasumično mijenja putanje paketa kako bi uravnotežio opterećenje na portovima preklopnika. Kako bi se smanjilo preuređivanje paketa, ova se operacija izvodi nakon razdoblja mirovanja kad god je to moguće. Upotreba PLB-a u Googleovim podatkovnim centrima smanjila je neravnotežu opterećenja na portovima preklopnika za prosječno 60%, smanjila gubitak paketa za 33% i smanjila kašnjenje za 20%.
    • Dodan upravljački program za MediaTek uređaje koji podržavaju Wi-Fi 7 (802.11be).
    • Dodana podrška za veze od 800 gigabita.
    • Dodana je mogućnost preimenovanja mrežnih sučelja u hodu, bez prekida rada.
    • Spominjanje IP adrese na koju je paket stigao dodan je u poruke dnevnika o SYN poplavi.
    • Za UDP je implementirana mogućnost korištenja zasebnih hash tablica za različite mrežne prostore imena.
    • Za mrežne mostove implementirana je podrška za MAB (MAC Authentication Bypass) metodu provjere autentičnosti.
    • Za CAN protokol (CAN_RAW), implementirana je podrška za način SO_MARK utičnice za pričvršćivanje filtara prometa temeljenih na fwmarku.
    • ipset implementira novi parametar bitmaske koji vam omogućuje postavljanje maske na temelju proizvoljnih bitova u IP adresi (na primjer, "ipset create set1 hash:ip bitmask 255.128.255.0").
    • Dodana podrška za obradu internih zaglavlja unutar tuneliranih paketa u nf_tables.
  • Оборудование
    • Podsustav “accel” dodan je implementacijom okvira za računalne akceleratore, koji se mogu isporučiti ili u obliku pojedinačnih ASIC-ova ili u obliku IP blokova unutar SoC-a i GPU-a. Ovi akceleratori uglavnom su usmjereni na ubrzavanje rješavanja problema strojnog učenja.
    • Upravljački program amdgpu uključuje podršku za GC, PSP, SMU i NBIO IP komponente. Za ARM64 sustave implementirana je podrška za DCN (Display Core Next). Implementacija zaštićenog izlaza zaslona prebačena je s upotrebe DCN10 na DCN21 i sada se može koristiti pri povezivanju više zaslona.
    • Upravljački program i915 (Intel) ima stabiliziranu podršku za diskretne Intel Arc (DG2/Alchemist) video kartice.
    • Nouveau upravljački program podržava NVIDIA GA102 (RTX 30) GPU-ove temeljene na Ampere arhitekturi. Za nva3 (GT215) kartice dodana je mogućnost kontrole pozadinskog osvjetljenja.
    • Dodana podrška za bežične adaptere temeljene na Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) i MediaTek MT7996 čipovima, Broadcom BCM4377/4378/4387 Bluetooth sučeljima, kao i Motorcomm yt8521 i NVIDIA Tegra GE Ethernet kontrolerima.
    • Dodana podrška za ASoC (ALSA sustav na čipu) za ugrađene zvučne čipove HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. Dodana podrška za audio sučelje Focusrite Saffire Pro 40. Dodan Realtek RT1318 audio kodek.
    • Dodana podrška za Sony pametne telefone i tablete (Xperia 10 IV, 5 IV, X i X compact, OnePlus One, 3, 3T i Nord N100, Xiaomi Poco F1 i Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1.
    • Dodana podrška za ARM SoC i 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.

U isto vrijeme, Latinoamerička zaklada za slobodni softver formirala je verziju potpuno besplatnog kernela 6.2 - Linux-libre 6.2-gnu, očišćenog od elemenata firmvera i upravljačkih programa koji sadrže neslobodne komponente ili dijelove koda, čiji je opseg ograničen od strane proizvođača. Novo izdanje čisti nove mrlje u nouveau upravljačkom programu. Blob učitavanje je onemogućeno u mt7622, ​​​​mt7996 wifi i bcm4377 bluetooth upravljačkim programima. Očišćeni nazivi blobova u dts datotekama za arhitekturu Aarch64. Ažurirani kod za čišćenje mrlja u raznim upravljačkim programima i podsustavima. Zaustavljeno čišćenje upravljačkog programa s5k4ecgx jer je uklonjen iz kernela.

Izvor: opennet.ru

Dodajte komentar