Izdanje kernela Linux 6.2

Nakon dva mjeseca razvoja, Linus Torvalds je predstavio izdanje Linux kernela 6.2. Među najznačajnijim promjenama: dozvoljeno je prihvatanje koda pod licencom Copyleft-Next, poboljšana je implementacija RAID5/6 u Btrfs-u, nastavlja se integracija podrške za Rust jezik, smanjeni su troškovi zaštite od Retbleed napada, Dodana je mogućnost regulacije potrošnje memorije tokom povratnog upisivanja, dodat je mehanizam za TCP balansiranje PLB (Protective Load Balancing), dodat je hibridni mehanizam zaštite toka komandi (FineIBT), BPF sada ima mogućnost definiranja vlastitih objekata i struktura podataka , uključen je uslužni program rv (Runtime Verification), smanjena je potrošnja energije u implementaciji RCU zaključavanja.

Nova verzija uključuje 16843 popravka od 2178 programera, veličina zakrpe je 62 MB (promjene su uticale na 14108 datoteka, dodano je 730195 linija koda, 409485 linija je obrisano). Oko 42% svih promjena uvedenih u 6.2 odnosi se na drajvere uređaja, otprilike 16% promjena se odnosi na ažuriranje koda specifičnog za hardverske arhitekture, 12% se odnosi na mrežni stog, 4% se odnosi na sistem datoteka i 3% odnose se na interne podsisteme kernela.

Ključne inovacije u kernelu 6.2:

  • Memorijski i sistemski servisi
    • Dozvoljeno je uključiti u kod kernela i promjene koje se nalaze pod licencom Copyleft-Next 0.3.1. Licencu Copyleft-Next kreirao je jedan od autora GPLv3 i potpuno je kompatibilna sa GPLv2 licencom, što su potvrdili pravnici iz SUSE-a i Red Hata. U poređenju sa GPLv2, Copyleft-Next licenca je mnogo kompaktnija i lakša za razumevanje (uklonjeni su uvodni deo i pominjanje zastarelih kompromisa), definiše vremenski okvir i proceduru za otklanjanje kršenja i automatski uklanja zahteve za copyleft za zastareli 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, čini ovu licencu kompatibilnom sa Apache 2.0 licencom. Kako bi se osigurala potpuna kompatibilnost sa GPLv2, Copyleft-Next izričito navodi da se izvedeno djelo može obezbijediti pod GPL licencom kao dodatak originalnoj Copyleft-Next licenci.

    • Struktura uključuje uslužni program “rv” koji obezbjeđuje interfejs za interakciju iz korisničkog prostora sa rukovaocima RV (Runtime Verification) podsistema, dizajniran za provjeru ispravnog rada na visoko pouzdanim sistemima koji garantuju odsustvo kvarova. Provjera se izvodi u vrijeme izvođenja pričvršćivanjem rukovalaca na tačke praćenja koje provjeravaju stvarni napredak izvršenja u odnosu na unaprijed određeni referentni deterministički model mašine koji definira očekivano ponašanje sistema.
    • zRAM uređaj, koji omogućava da se swap particija pohrani u memoriju u komprimiranom obliku (blok uređaj se kreira u memoriji na koji se swap vrši kompresijom), implementira mogućnost prepakiranja stranica korištenjem alternativnog algoritma za postizanje višeg nivoa kompresije. Osnovna ideja je da se omogući izbor između nekoliko algoritama (lzo, lzo-rle, lz4, lz4hc, zstd), nudeći sopstvene kompromise između brzine kompresije/dekompresije i nivoa kompresije, ili optimalnih u posebnim situacijama (na primer, za kompresiju velikih memorijske stranice).
    • Dodan "iommufd" API za upravljanje I/O sistemom za upravljanje memorijom - IOMMU (I/O Memory-Management Unit) iz korisničkog prostora. Novi API omogućava upravljanje tablicama stranica I/O memorije pomoću deskriptora datoteka.
    • BPF pruža mogućnost kreiranja tipova, definiranja vlastitih objekata, izgradnje vlastite hijerarhije objekata i fleksibilnog kreiranja vlastitih struktura podataka, kao što su povezane liste. 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. Dodan tip karte BPF_MAP_TYPE_CGRP_STORAGE, pružajući lokalnu pohranu za cgroups.
    • Za mehanizam blokiranja RCU (Read-copy-update) implementiran je opcioni mehanizam „lijenih” povratnih poziva, u kojem se nekoliko povratnih poziva obrađuje odjednom pomoću tajmera u batch modu. Primjena predložene optimizacije nam omogućava da smanjimo potrošnju energije na Android i ChromeOS uređajima za 5-10% odgađanjem RCU zahtjeva za vrijeme mirovanja ili niskog opterećenja sistema.
    • Dodan sysctl split_lock_mitigate za kontrolu načina na koji sistem reaguje kada otkrije podijeljena zaključavanja koja se javljaju prilikom pristupa neusklađenim podacima u memoriji zbog podataka koji prelaze dvije CPU keš linije prilikom izvršavanja atomske instrukcije. Takve blokade dovode do značajnog pada performansi. Postavljanje split_lock_mitigate na 0 samo daje upozorenje da postoji problem, dok postavljanje split_lock_mitigate na 1 također uzrokuje usporavanje procesa koji je uzrokovao zaključavanje radi očuvanja performansi za ostatak sistema.
    • Predložena je nova implementacija qspinlock za PowerPC arhitekturu, koja pokazuje veće performanse i rješava neke probleme zaključavanja koji se javljaju u izuzetnim slučajevima.
    • MSI (Message-Signaled Interrupts) kod za rukovanje prekidima je prerađen, eliminišući nagomilane arhitektonske probleme i dodajući podršku za vezivanje pojedinačnih rukovalaca za različite uređaje.
    • Za sisteme bazirane na arhitekturi skupa instrukcija LoongArch koja se koristi u procesorima Loongson 3 5000 i implementira novi RISC ISA, sličan MIPS i RISC-V, implementirana je podrška za ftrace, zaštitu steka, režim mirovanja i režim mirovanja.
    • Omogućena je mogućnost dodjeljivanja imena područjima dijeljene anonimne memorije (ranije su imena mogla biti dodijeljena samo privatnoj anonimnoj memoriji koja je dodijeljena određenom procesu).
    • Dodan je novi parametar komandne linije kernela “trace_trigger”, dizajniran da aktivira okidač praćenja koji se koristi za vezivanje uslovnih naredbi pozvanih kada se pokrene kontrolna provjera (na primjer, trace_trigger=”sched_switch.stacktrace if prev_state == 2″).
    • Zahtjevi za verziju binutils paketa su povećani. Izgradnja kernela sada zahtijeva najmanje binutils 2.25.
    • Prilikom pozivanja exec(), dodata je mogućnost postavljanja procesa u vremenski prostor imena, u kojem se vrijeme razlikuje od sistemskog vremena.
    • Počeli smo sa prenosom dodatnih funkcionalnosti iz grane Rust-for-Linux u vezi sa upotrebom Rust jezika kao drugog jezika za razvoj drajvera i modula kernela. Podrška za Rust je onemogućena prema zadanim postavkama i ne dovodi do toga da Rust bude uključen kao obavezna ovisnost o izgradnji kernela. Osnovna funkcionalnost ponuđena u posljednjem izdanju proširena je za podršku niskog nivoa koda, kao što su tip Vec i makroi pr_debug!(), pr_cont!() i pr_alert!(), kao i proceduralni makro “#[vtable ]”, što pojednostavljuje rad sa tabelama pokazivača na funkcijama. Dodavanje Rust veza visokog nivoa preko podsistema kernela, što će omogućiti kreiranje punopravnih drajvera u Rustu, očekuje se u budućim izdanjima.
    • Tip "char" koji se koristi u kernelu sada je po defaultu deklariran kao nepotpisan za sve arhitekture.
    • Mehanizam za dodjelu memorije ploča - SLOB (slab allocator), koji je dizajniran za sisteme s malom količinom memorije, proglašen je zastarjelim. Umjesto SLOB-a, u normalnim uvjetima preporučuje se korištenje SLUB-a ili SLAB-a. Za sisteme sa malom količinom memorije, preporučljivo je koristiti SLUB u SLUB_TINY modu.
  • Diskovni podsistem, I/O i sistemi datoteka
    • Napravljena su poboljšanja u Btrfs-u u cilju rješavanja problema “rupe za upisivanje” u implementaciji RAID 5/6 (pokušaj vraćanja RAID-a ako dođe do pada tokom pisanja i nemoguće je razumjeti koji blok na kojem RAID uređaju je ispravno napisan, što može dovesti do uništenja bloka, što odgovara prepisanim blokovima). Osim toga, SSD-ovi sada automatski omogućavaju asinhroni rad odbacivanja prema zadanim postavkama kada je to moguće, omogućavajući poboljšane performanse zbog efikasnog grupisanja operacija odbacivanja u redove i obrade reda od strane procesora u pozadini. Poboljšane performanse operacija slanja i lseek, kao i FIEMAP ioctl.
    • Proširene su mogućnosti upravljanja odgođenim pisanjem (povratni upis, pozadinsko čuvanje promijenjenih podataka) za blok uređaje. U nekim situacijama, kao što je korištenje mrežnih blok uređaja ili USB diskova, lijeno pisanje može rezultirati velikom potrošnjom RAM-a. Kako bi se kontroliralo ponašanje lijenih pisanja i zadržala veličina keša stranice u određenim granicama, novi parametri strict_limit, min_bytes, max_bytes, min_ratio_fine i max_ratio_fine su uvedeni u sysfs (/sys/class/bdi/).
    • F2FS sistem datoteka implementira operaciju atomske zamjene ioctl, koja vam omogućava da upišete podatke u datoteku unutar jedne atomske operacije. F2FS takođe dodaje predmemoriju opsega bloka kako bi pomogao u identifikaciji aktivno korištenih podataka ili podataka kojima se nije pristupalo duže vrijeme.
    • U ext4 FS su zabilježene samo ispravke grešaka.
    • Sistem datoteka ntfs3 nudi nekoliko novih opcija montiranja: “nocase” za kontrolu osjetljivosti na velika i mala slova u imenima datoteka i direktorija; windows_name za zabranu kreiranja imena datoteka koje sadrže znakove koji nisu važeći za Windows; hide_dot_files za kontrolu dodjele skrivene oznake datoteke za datoteke koje počinju s tačkom.
    • Squashfs sistem datoteka implementira opciju montiranja “threads=”, koja vam omogućava da definirate broj niti za paralelizaciju operacija dekompresije. Squashfs je također predstavio mogućnost mapiranja korisničkih ID-ova montiranih sistema datoteka, koji se koriste za uparivanje datoteka određenog korisnika na montiranoj stranoj particiji sa drugim korisnikom na trenutnom sistemu.
    • Implementacija POSIX listi kontrole pristupa (POSIX ACL) je prerađena. Nova implementacija eliminiše arhitektonske probleme, pojednostavljuje održavanje baze koda i uvodi sigurnije tipove podataka.
    • Podsistem fscrypt, koji se koristi za transparentno šifrovanje fajlova i direktorijuma, dodao je podršku za SM4 algoritam šifrovanja (kineski standard GB/T 32907-2016).
    • Mogućnost izrade kernela bez NFSv2 podrške je obezbeđena (u budućnosti planiraju da potpuno prestanu da podržavaju 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 (prethodno je proces morao imati dozvolu CAP_SYS_ADMIN).
    • Uklonjen je upravljački program za CD/DVD paket, koji je zastario 2016.
  • Virtuelizacija i sigurnost
    • Nova metoda zaštite od retbleed ranjivosti implementirana je u Intel i AMD procesore, koristeći praćenje dubine poziva, što ne usporava rad toliko kao ranije prisutna zaštita od Retbleeda. Da bi se omogućio novi način rada, predložen je parametar komandne linije kernela “retbleed=stuff”.
    • Dodan je hibridni mehanizam zaštite toka FineIBT instrukcija, kombinujući upotrebu hardverskih Intel IBT (Indirektno praćenje grana) instrukcija i softversku zaštitu kCFI (kernel Control Flow Integrity) za blokiranje kršenja normalnog naloga izvršenja (kontrolnog toka) kao rezultat upotrebe eksploatacija koje modificiraju pokazivače pohranjene u memoriji na funkcije. FineIBT dozvoljava izvršavanje indirektnim skokom samo u slučaju skoka na ENDBR instrukciju, koja se nalazi na samom početku funkcije. Dodatno, po analogiji sa mehanizmom kCFI, heš se zatim provjerava kako bi se zajamčila nepromjenjivost pokazivača.
    • Dodata ograničenja za blokiranje napada koji manipulišu generisanjem stanja "ups", nakon čega se problematični zadaci završavaju i stanje se vraća bez zaustavljanja sistema. Sa vrlo velikim brojem poziva u stanje "oops", dolazi do prekoračenja referentnog brojača (refcount), koji omogućava iskorištavanje ranjivosti uzrokovanih dereferencijama NULL pokazivača. Da bi se zaštitili od ovakvih napada, kernelu je dodato ograničenje za maksimalan broj „oops“ okidača, nakon prekoračenja kojeg će kernel pokrenuti prijelaz u stanje „panike“ nakon čega slijedi ponovno pokretanje, što neće omogućiti postizanje broj iteracija potrebnih da se prekorači refcount. Prema zadanim postavkama, ograničenje je postavljeno na 10 hiljada "oops", ali po želji se može promijeniti putem parametra oops_limit.
    • Dodan konfiguracijski parametar LEGACY_TIOCSTI i sysctl legacy_tiocsti za onemogućavanje mogućnosti stavljanja podataka u terminal korištenjem ioctl TIOCSTI, budući da se ova funkcionalnost može koristiti za zamjenu proizvoljnih znakova u terminal ulazni bafer i simulaciju korisničkog unosa.
    • Predlaže se novi tip 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 dereferenciranje zaista potrebno, 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 bafera na steku ( Suština zaštite je da se povratna adresa sačuva u zasebnom steku „senka“ nakon što se kontrola prenese na funkciju i dohvati datu adresu pre izlaska iz funkcije). Podrška za hardverske i softverske implementacije Shadow Stack-a u jednom sklopu kernela omogućava vam da koristite jedno jezgro na različitim ARM sistemima, bez obzira na njihovu podršku za uputstva za autentifikaciju pokazivača. Uključivanje softverske implementacije vrši se zamjenom potrebnih instrukcija u kodu tokom učitavanja.
    • Dodata podrška za korištenje mehanizma asinhronog obavještavanja o izlazu na Intel procesorima, koji omogućava otkrivanje napada u jednom koraku na kod koji se izvršava u SGX enklavama.
    • Predložen je skup operacija koje omogućavaju hipervizoru da podrži zahtjeve Intel TDX (Trusted Domain Extensions) gostujućih sistema.
    • Postavke izrade kernela RANDOM_TRUST_BOOTLOADER i RANDOM_TRUST_CPU su uklonjene, u korist odgovarajućih opcija komandne linije random.trust_bootloader i random.trust_cpu.
    • Mehanizam Landlock, koji vam omogućava da ograničite interakciju grupe procesa sa spoljnim okruženjem, dodao je podršku za LANDLOCK_ACCESS_FS_TRUNCATE zastavicu, koja omogućava kontrolu izvršavanja operacija skraćivanja datoteka.
  • Mrežni podsistem
    • Za IPv6, dodata je podrška za PLB (Protective Load Balancing), mehanizam za balansiranje opterećenja između mrežnih veza koji ima za cilj smanjenje tačaka preopterećenja na prekidačima centra podataka. Promjenom IPv6 oznake toka, PLB nasumično mijenja putanje paketa kako bi uravnotežio opterećenje na portovima komutatora. Da bi se smanjilo preuređenje paketa, ova operacija se izvodi nakon perioda mirovanja kad god je to moguće. Upotreba PLB-a u Google data centrima smanjila je neravnotežu opterećenja na portovima komutatora u prosjeku za 60%, smanjila gubitak paketa za 33% i smanjila kašnjenje za 20%.
    • Dodan drajver za MediaTek uređaje koji podržavaju Wi-Fi 7 (802.11be).
    • Dodata podrška za 800-gigabitne veze.
    • Dodata mogućnost preimenovanja mrežnih interfejsa u hodu, bez zaustavljanja rada.
    • Pominjanje IP adrese na koju je stigao paket je dodato u dnevnik poruke o SYN flood.
    • Za UDP je implementirana mogućnost korištenja odvojenih hash tablica za različite mrežne prostore imena.
    • Za mrežne mostove implementirana je podrška za metodu provjere autentičnosti MAB (MAC Authentication Bypass).
    • Za CAN protokol (CAN_RAW), implementirana je podrška za SO_MARK socket mod za priključivanje filtera prometa baziranih na fwmark.
    • ipset implementira novi parametar bitmaske koji vam omogućava da postavite masku na osnovu proizvoljnih bitova u IP adresi (na primjer, "ipset create set1 hash:ip bitmask 255.128.255.0").
    • Dodata podrška za obradu internih zaglavlja unutar tuneliranih paketa u nf_tables.
  • Oprema
    • Podsistem “accel” je dodat implementacijom okvira za računske 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 su uglavnom usmjereni na ubrzanje rješavanja problema strojnog učenja.
    • Amdgpu drajver uključuje podršku za GC, PSP, SMU i NBIO IP komponente. Za ARM64 sisteme implementirana je podrška za DCN (Display Core Next). Implementacija zaštićenog izlaza na ekranu premještena je s korištenja DCN10 na DCN21 i sada se može koristiti pri povezivanju više ekrana.
    • i915 (Intel) drajver ima stabilizovanu podršku za diskretne Intel Arc (DG2/Alchemist) video kartice.
    • Nouveau drajver podržava NVIDIA GA102 (RTX 30) GPU zasnovane na Ampere arhitekturi. Za nva3 (GT215) kartice, dodata je mogućnost kontrole pozadinskog osvjetljenja.
    • Dodata podrška za bežične adaptere bazirane na Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) i MediaTek MT7996 čipovima, Broadcom BCM4377/4378/4387 Bluetooth interfejsima, kao i 8521 Motorcomm XNUMX kontrolne interfejse za Ethernet i NVI DI.
    • Dodata podrška za ASoC (ALSA sistem 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. Dodata podrška za Focusrite Saffire Pro 40 audio sučelje Dodan Realtek RT1318 audio kodek.
    • Dodata 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 sat, Google Pixel 3a, Samsung Galaxy Tab 4 10.1.
    • Dodata 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) (Snapdragon 6375) ploče , SDM695 (Snapdragon 670), MSM670 (Snapdragon 8976), MSM652 (Snapdragon 8956), RK650 Odroid-Go/rg3326, Zyxel NSA351S, InnoComm i.MX310MM, Odroid Go Ultra.

U isto vrijeme, Latinoamerička fondacija za slobodni softver formirala je verziju potpuno besplatnog kernela 6.2 - Linux-libre 6.2-gnu, očišćenu od elemenata firmvera i drajvera koji sadrže vlasničke komponente ili dijelove koda, čiji je opseg ograničen proizvođač. Novo izdanje čisti nove mrlje u nouveau drajveru. Učitavanje blob-ova je onemogućeno u drajverima za mt7622, ​​mt7996 wifi i bcm4377 bluetooth. Očišćena imena blobova u dts datotekama za arhitekturu Aarch64. Ažuriran kod za čišćenje mrlja u različitim drajverima i podsistemima. Zaustavljeno je čišćenje s5k4ecgx drajvera, jer je uklonjen iz kernela.

izvor: opennet.ru

Dodajte komentar