Nakon dva mjeseca razvoja, Linus Torvalds predstavio je izdanje jezgre Linux 5.18. Među najistaknutijim promjenama: provedena je velika čišćenja zastarjelih funkcionalnosti, objavljena je zastarjela datotečna sustava Reiserfs, implementirani su događaji praćenja korisničkih procesa, dodana je podrška za mehanizam blokiranja rada eksploitova Intel IBT, uključen je način otkrivanja preopterećenja bafera prilikom korištenja funkcije memcpy(), dodan je mehanizam praćenja poziva funkcija fprobe, poboljšane su performanse raspoređivača zadataka na CPU AMD Zen, u sastav je uključen upravljački program za upravljanje funkcionalnošću CPU Intel (SDS), integriran je dio zakrpa za restrukturiranje zaglavlja, odobrena je primjena standarda C11.
U novu verziju uključeno je 16206 ispravki od 2127 programera (u prethodnom izdanju bilo je 14203 ispravki od 1995 programera), veličina zakrpe iznosi 108 MB (promjene su obuhvatile 14235 datoteka, dodano je 1340982 linija koda, uklonjeno 593836 linija). Otprilike 44% svih predstavljenih u 5.18 promjena odnosi se na upravljačke programe uređaja, otprilike 16% promjena tiče se ažuriranja koda specifičnog za hardverske arhitekture, 11% se odnosi na mrežni sloj, 3% na datotečne sustave i 3% na unutarnje podsustave jezgre.
Glavne novosti u jezgri 5.18:
- Sistem diska, ulaz/izlaz i datotečni sustavi
- U datotečnom sustavu Btrfs dodana je podrška za prosljeđivanje komprimiranih podataka prilikom izvođenja operacija slanja i primanja. Prije se prilikom korištenja slanja/primanja, strana koja šalje nekomprimirane podatke, raspakiravala prije nego što su ponovno komprimirani prilikom zapisivanja. U jezgri 5.18 aplikacijama u korisničkom prostoru, koje koriste pozive slanja/primanja, omogućen je prijenos komprimiranih podataka bez ponovnog pakiranja. Funkcionalnost je implementirana zahvaljujući novim ioctl operacijama BTRFS_IOC_ENCODED_READ i BTRFS_IOC_ENCODED_WRITE, koje omogućuju izravno čitanje i pisanje informacija u ekstente.
Osim toga, u Btrfs poboljšane su performanse fsync. Dodana je mogućnost deduplikanja i izvođenja reflink (kloniranje metapodataka datoteke s kreiranjem veze na već postojeće podatke bez stvarnog kopiranja) za cijelo skladište, ne ograničavajući se na točke montiranja.
- U načinu direktnog ulaza/izlaza (Direct I/O) omogućena je mogućnost pristupa enkriptiranim datotekama korištenjem inline enkripcije u fscrypt-u, gdje operacije enkripcije i dekripcije obavlja kontroler uređaja, a ne jezgro. Kod obične enkripcije snagom jezgra, pristup enkriptiranim datotekama putem Direct I/O i dalje nije moguć, budući da se pristup datotekama vrši mimo mehanizma keširanja u jezgru.
- Na NFS poslužitelju podrška za NFSv3 protokol je po defaultu omogućena, sada ne zahtijeva posebno uključivanje i dostupna je pri općem uključivanju NFS-a. NFSv3 se smatra osnovnom i uvijek podržavanom verzijom NFS-a, dok bi podrška za NFSv2 mogla biti prekinuta u budućnosti. Značajno je povećana učinkovitost čitanja sadržaja direktorija.
- Datotečni sustav ReiserFS prebačen je u status zastarjelog i očekuje se njegovo uklanjanje 2025. godine. Prebacivanje ReiserFS-a u status zastarjelog omogućit će smanjenje radnih troškova za održavanje zajedničkih promjena za datotečne sustave, vezanih uz podršku novog API-ja za montiranje, iomap i foliante.
- Za F2FS implementirana je mogućnost mapiranja korisničkih identifikatora montiranih datotečnih sustava, koja se koristi za usklađivanje datoteka određenog korisnika na montiranom tuđem dijelu s drugim korisnikom u trenutnom sustavu.
- Kod za izračun statistike u uređivačima Device-mapper preuređen je, što je značajno povećalo točnost računanja u takvim uređivačima kao što su dm-crypt.
- Za NVMe uređaje implementirana je podrška za 64-bitne kontrolne zbrojeve za provjeru cjelovitosti.
- Za datotečni sustav exfat predložena je nova opcija montiranja "keep_last_dots", koja zabranjuje brisanje točaka na kraju imena datoteke (u Windows-u se točke na kraju imena prema zadanim postavkama brišu).
- U EXT4 poboljšana je izvedba načina fast_commit i povećana skalabilnost. Opcija montiranja "mb_optimize_scan", koja omogućava povećanje performansi u uvjetima velike fragmentacije FS-a, prilagođena je za rad s datotekama s ekstenzima.
- Prekida se podrška za zapisne tokove (write stream) u podsustavu koja osigurava rad blokovnih uređaja. Ova mogućnost je predložena za SSD, ali nije se širila i trenutno ne postoje uređaji koji podržavaju ovaj način, a malo je vjerojatno da će se oni pojaviti u budućnosti.
- U datotečnom sustavu Btrfs dodana je podrška za prosljeđivanje komprimiranih podataka prilikom izvođenja operacija slanja i primanja. Prije se prilikom korištenja slanja/primanja, strana koja šalje nekomprimirane podatke, raspakiravala prije nego što su ponovno komprimirani prilikom zapisivanja. U jezgri 5.18 aplikacijama u korisničkom prostoru, koje koriste pozive slanja/primanja, omogućen je prijenos komprimiranih podataka bez ponovnog pakiranja. Funkcionalnost je implementirana zahvaljujući novim ioctl operacijama BTRFS_IOC_ENCODED_READ i BTRFS_IOC_ENCODED_WRITE, koje omogućuju izravno čitanje i pisanje informacija u ekstente.
- Memorija i sistemske usluge
- Započela je integracija skupa ispravaka koji značajno skraćuje vrijeme ponovne izrade jezgre restrukturiranjem hijerarhije zaglavlja i smanjenjem broja međuzavisnosti. U jezgru 5.18 uključene su ispravke koje optimiziraju strukturu zaglavlja planera zadataka (kernel/sched). U usporedbi s prošlim izdanjem, potrošnja procesorskog vremena pri izradi koda kernel/sched/ smanjena je za 61%, dok je stvarno vrijeme smanjeno za 3,9% (s 2,95 na 2,84 sekunde).
- Kod jezgre sada dopušta korištenje C11 standarda, objavljenog 2011. godine. Ranije dodavan kod u jezgru morao je odgovarati ANSI C (C89) specifikaciji koja je formirana još 1989. godine. U skriptama za izradu jezgre 5.18, opcija ‘—std=gnu89’ zamijenjena je s ‘—std=gnu11 -Wno-shift-negative-value’. Razmatrana je mogućnost korištenja C17 standarda, ali bi u tom slučaju trebalo povećati minimalnu podržavanu verziju GCC-a, dok uključivanje podrške za C11 odgovara trenutnim zahtjevima za verziju GCC-a (5.1).
- Povećana je učinkovitost planiranja zadataka na AMD procesorima s mikroarhitekturom Zen, gdje je za svaki čvor s lokalnim memorijskim kanalima osigurano više posljednjih nivoa predmemorije (LLC, Last Level Cache). U novoj verziji ispravljen je disbalans LLC između NUMA čvorova, što je uzrokovalo značajno poboljšanje performansi pod određenim vrstama opterećenja.
- Prošireni su alati za praćenje aplikacija u korisničkom prostoru. U novoj verziji jezgre dodana je mogućnost stvaranja događaja praćenja od strane korisničkih procesa i zapisivanja podataka u predmemoriju praćenja, koje se mogu pregledati kroz standardne alate za praćenje jezgre kao što su ftrace i perf. Događaji praćenja iz korisničkog prostora su izolirani od događaja praćenja jezgre. Stanje događaja može se pregledati kroz datoteku /sys/kernel/debug/tracing/user_events_status, dok se registracija događaja i zapisivanje podataka vrši kroz datoteku /sys/kernel/debug/tracing/user_events_data.
- Dodana je funkcija praćenja (probe) poziva funkcija — fprobe. API fprobe temelji se na ftrace-u, ali je ograničen samo na mogućnost dodavanja callback handler-a na ulazne točke u funkcije i završetak rada funkcije. Za razliku od kprobes i kretprobes, novi mehanizam omogućava korištenje jednog handler-a za više funkcija.
- Prekinuta je podrška za stare ARM procesore (ARMv4 i ARMv5) koji nemaju jedinicu za upravljanje memorijom (MMU). Podrška za ARMv7-M sisteme bez MMU je očuvana.
- Prekinuta je podrška za RISC-sličnu arhitekturu NDS32, koja se koristila u procesorima kompanije Andes Technologies. Kod je uklonjen zbog nedostatka podrške i neiskorištenosti NDS32 podrške u glavnoj Linux jezgri (preostali korisnici koriste specijalizirane verzije jezgre od proizvođača opreme).
- Podrazumijevano je onemogućena izrada jezgre sa podrškom za a.out format izvršnih datoteka za arhitekture alpha i m68k, gdje se taj format i dalje koristi. Vjerojatno će podrška zastarjelog a.out formata uskoro biti potpuno uklonjena iz jezgre. Planovi za uklanjanje a.out formata raspravljaju se od 2019. godine.
- Za PA-RISC arhitekturu implementirana je minimalna podrška za vDSO (virtualne dinamičke zajedničke objekte), koja pruža ograničen set sistemskih poziva dostupnih u korisničkom prostoru bez prebacivanja konteksta. Podrška vDSO omogućila je pokretanje s neizvršivim stekom.
- Dodana je podrška za mehanizam Intel HFI (Hardware Feedback Interface), koji omogućava hardveru prijenos informacija jezgru o trenutnoj performansi i energetskoj učinkovitosti svakog CPU-a.
- Dodavan je upravljački program za mehanizam Intel SDSi (Software-Defined Silicon), koji omogućava upravljanje aktivacijom dodatnih mogućnosti u procesoru (na primjer, specijalizirane instrukcije i dodatna cache memorija). Ideja je da se čipovi s blokiranim proširenim funkcijama mogu isporučiti po nižoj cijeni, a zatim se mogu "krenuti" za aktivaciju dodatnih mogućnosti bez fizičke zamjene čipa.
- Dodani su drajveri amd_hsmp za podršku AMD HSMP (Host System Management Port) sučelju, koji omogućava pristup funkcijama upravljanja procesorom putem skupa specijalnih registara uvedenih u AMD EPYC server procesorima počevši od Fam19h generacije. Na primjer, putem HSMP-a moguće je dobiti podatke o potrošnji energije i temperaturi, postaviti ograničenja na frekvenciju, aktivirati različite načine povećanja performansi, te upravljati parametrima rada memorije.
- U sučelju asinkronog ulaza/izlaza io_uring implementirana je opcija IORING_SETUP_SUBMIT_ALL za registraciju u kružnom baferu skupa deskriptora datoteka, kao i operacija IORING_OP_MSG_RING, koja omogućava slanje signala iz jednog kružnog bafera u drugi kružni bafer.
- U mehanizmu DAMOS (Data Access Monitoring-based Operation Schemes), koji omogućava oslobađanje memorije uzimajući u obzir učestalost pristupa memoriji, proširene su mogućnosti kontrole operacija s memorijom iz prostora korisnika.
- Integrirana je treća serija zakrpa s implementacijom koncepta folija stranica memorije (page folios), koji podsjećaju na spojene stranice memorije (compound pages), ali se razlikuju poboljšanom semantikom i jasnijom organizacijom rada. Korištenje folija omogućava brže upravljanje memorijom u nekim podsistemima jezgre. U predloženim zakrpama izvršen je prijenos na folije unutarnjih funkcija upravljanja memorijom, uključujući varijante funkcije get_user_pages(). Pružena je podrška za stvaranje velikih folija u kodu unaprijed pročitane podatke.
- U sustavu izgradnje uvedena je podrška za varijable okruženja USERCFLAGS i USERLDFLAGS, pomoću kojih se mogu prenijeti dodatne zastavice kompajleru i linkeru.
- U eBPF podsustavu, u mehanizmu BTF (BPF Type Format), koji pruža informacije za provjeru tipova u BPF pseudokodu, implementirana je mogućnost dodavanja anotacija varijablama koje se odnose na memorijske prostore u korisničkom prostoru. Anotacije pomažu sustavu verifikacije BPF koda u kvalitetnijem prepoznavanju i provjeri pristupa memoriji.
- Predložen je novi upravitelj dodjele memorije za pohranu učitanih BPF programa, koji omogućava učinkovitije korištenje memorije u situacijama učitavanja velikog broja BPF programa.
- U sistemski poziv madvise() dodana je zastavica MADV_DONTNEED_LOCKED, koja dopunjuje već postojeću zastavicu MADV_DONTNEED, putem koje se jezgru može unaprijed signalizirati oslobađanje bloka memorije, tj. da taj blok više nije potreban i može se koristiti od strane jezgre. Za razliku od MADV_DONTNEED, korištenje zastavice MADV_DONTNEED_LOCKED dopušteno je za zaključane stranice memorije u RAM-u, koje se prilikom poziva madvise izbacuju bez promjene svog zaključanog statusa i u slučaju naknadnog pristupa bloku i generiranja "page fault" vraćaju se sa očuvanom vezom. Dodatno je dodana promjena koja omogućava korištenje zastavice MADV_DONTNEED s većim stranicama memorije u HugeTLB.
- Virtualizacija i sigurnost
- Za arhitekturu x86 dodana je podrška za mehanizam zaštite toka izvršavanja instrukcija Intel IBT (Indirect Branch Tracking), koji sprečava primjenu tehnika izrade exploit-a korištenjem povratno-orijentiranog programiranja (ROP, Return-Oriented Programming), pri kojem se exploit formira u obliku lanca poziva već postojećih u memoriji dijelova strojnih instrukcija, završavajući instrukcijom vraćanja kontrole (obično se radi o završecima funkcija). Suština realizovane metode zaštite je u blokiranju indirektnih prijelaza unutar funkcije dodavanjem posebne instrukcije ENDBR na početak funkcije, a dozvoljava se izvršenje putem indirektnog prijelaza samo u slučaju prelaska na ovu instrukciju (indirektni poziv putem JMP i CALL uvijek mora zadesiti instrukciju ENDBR, koja je smještena na samom početku funkcije).
- Uključena je stroža provjera ograničenja bafera u funkcijama memcpy(), memmove() i memset(), koja se vrši tokom kompilacije kada je uključen režim CONFIG_FORTIFY_SOURCE. Dodana promjena se svodi na provjeru izlaska izvan granica elemenata struktura čija je veličina poznata. Napominje se da bi realizovana mogućnost omogućila blokiranje svih buffer overflow-a vezanih uz memcpy() u jezgru, otkrivenih barem u posljednje tri godine.
- Dodana je druga verzija koda ažurirane implementacije generatora pseudonarandim brojeva RDRAND, koja je zadužena za rad uređaja /dev/random i /dev/urandom. Nova implementacija je značajna po unifikaciji rada /dev/random i /dev/urandom, dodavanju zaštite od dupliciranja u toku slučajnih brojeva prilikom pokretanja. virtualnih mašina i prelaskom na korištenje hash funkcije BLAKE2s umjesto SHA1 za operacije miješanja entropije. Ova promjena povećava sigurnost generatora pseudonarandim brojeva, uklanjanjem problematičnog algoritma SHA1 i isključivanjem prepisivanja inicijalizacijskog vektora RNG-a. Budući da algoritam BLAKE2s premašuje SHA1 po performansama, njegova primjena je također pozitivno utjecala na učinkovitost.
- Za ARM64 arhitekturu dodana je podrška za novi algoritam autentifikacije pokazivača - „QARMA3“, koji je brži od algoritma QARMA uz zadržavanje željenog nivoa zaštite. Ova tehnologija omogućava korištenje specijaliziranih ARM64 instrukcija za provjeru povratnih adresa pomoću digitalnih potpisa, koji se čuvaju u neiskorištenim gornjim bitovima samog pokazivača.
- Za ARM64 arhitekturu implementirana je podrška za izgradnju s uključivanjem u GCC 12 režima zaštite od prepisivanja povratne adrese iz funkcije u slučaju prelivanja bafera u steku. Suština zaštite leži u čuvanju povratne adrese nakon prijenosa kontrole funkcije u odvojenom „senkom“ steku i izvlačenju te adrese prije izlaska iz funkcije.
- Dodano je novo skladište ključeva (keyring) - „machine“, koje sadrži ključeve vlasnika sistema (MOK, Machine Owner Keys) podržane u shim bootloader-u. Ovi ključevi se mogu koristiti za potpise digitalnim potpisom komponenti jezgre koje se učitavaju u fazi nakon inicijalnog pokretanja (na primjer, moduli jezgre).
- Uklonjena je podrška za asimetrične privatne ključeve za TPM, koji su predloženi u zastarjeloj verziji TPM-a, imaju poznate sigurnosne probleme i nisu našli primjenu u praksi.
- Dodana je zaštita podataka tipa size_t od cjelobrojnih prelivanja. U kodu su korišteni handleri size_mul(), size_add() i size_sub(), koji omogućavaju sigurno izvođenje množenja, sabiranja i oduzimanja veličina tipa size_t.
- Prilikom sastavljanja jezgre uključene su opcije «-Warray-bounds» i «-Wzero-length-bounds», koje ispisuju upozorenja kada indeks izlazi izvan granica niza i kada se koriste nizovi nulte dužine.
- U virtio-crypto uređaj dodana je podrška za enkripciju koristeći RSA algoritam.
- Mrežni subsistem
- U implementaciju mrežnih mostova dodana je podrška za način zaključavanja portova (locked mode), gdje korisnik može slati promet samo preko dozvoljenog MAC adresa. Također je dodana mogućnost korištenja više struktura za procjenu stanja STP (Spanning Tree Protocol) protokola. Ranije se za VLAN mogao koristiti samo izravni pristup STP-u (1:1), gdje je svaki VLAN bio neovisno upravljan. U novoj verziji dodana je opcija mst_enable, pri čemu se stanje VLAN-ova kontrolira pomoću MST (Multiple Spanning Trees) modula, a vezivanja VLAN-ova može odgovarati M:N modelu.
- Nastavljena je integracija u mrežni sloj alata za praćenje uzroka odbacivanja paketa (kodeva reason). Kod uzroka se šalje prilikom oslobađanja memorije povezane s paketom i omogućava prepoznavanje situacija poput odbacivanja paketa zbog grešaka u ispunjavanju polja u zaglavlju, otkrivanje spoofinga putem rp_filter-a, neispravne kontrolne sume, nedostatka memorije, usklađivanja IPSec XFRM pravila, neispravnog TCP broja sekvencije itd.
- Omogućeno je prosljeđivanje mrežnih paketa iz BPF programa pokrenutih iz korisničkog prostora u režimu BPF_PROG_RUN, gdje se BPF programi izvršavaju unutar jezgre, ali rezultati se vraćaju u korisnički prostor. Paketi se prenose koristeći XDP (eXpress Data Path) podsustav. Podržava se live način obrade paketa, gdje XDP obrtnik može u stvarnom vremenu preusmjeravati mrežne pakete u mrežni stog ili na druge uređaje. Također je moguće stvarati softverske generatore vanjskog prometa ili umetati mrežne okvire u mrežni stog.
- Za BPF programe koji se vežu uz mrežne cgroups, predložene su pomoćne funkcije za izričito postavljanje vrijednosti koju vraćaju sistemski pozivi, što omogućuje slanje potpunijih informacija o uzrocima blokiranja sistemskog poziva.
- U XDP (eXpress Data Path) podsustav dodana je podrška za fragmentirane pakete smještene u više bafera, što omogućava obradu Jumbo-paketa u XDP-u i primjenu TSO/GRO (TCP Segmentation Offload/Generic Receive Offload) za XDP_REDIRECT.
- Znatno je ubrzan proces brisanja mrežnih prostora imena, što je bilo potrebno u nekim velikim sustavima s velikim prometom.
- Oprema
- U amdgpu drajveru, tehnologija adaptivne sinhronizacije FreeSync je po defaultu aktivirana, što omogućava prilagođavanje frekvencije osvežavanja na ekranu, osiguravajući glatkoću i uklanjanje prekida slike tokom igara i gledanja videa. Stabilna podrška za GPU Aldebaran je objavljena.
- U i915 drajveru dodata je podrška za Intel Alderlake N čipove i diskretne Intel DG2-G12 (Arc Alchemist) grafičke kartice.
- U nouveau drajveru osigurana je podrška za više bitrate-a za DP/eDP interfejse i podrška za produživače kablova lttprs (Link-Training Tunable PHY Repeaters).
- U drm (Direct Rendering Manager) podsystemu, u armada, exynos, gma500, hyperv, imx, ingenic, mcde, mediatek, msm, omap, rcar-du, rockchip, sprd, sti, tegra, tilcdc, xen i vc4 drajverima dodata je podrška za nomodeset parametar, koji omogućava isključivanje prebacivanja video režima na nivou jezgra i korišćenje sredstava za hardversko ubrzanje renderovanja, ostavljajući samo funkcionalnost vezanu za sistemski frame buffer.
- Dodata je podrška za ARM SoC Qualcomm Snapdragon 625/632 (koristi se u LG Nexus 5X i Fairphone FP3 pametnim telefonima), Samsung Exynos 850, Samsung Exynos 7885 (koristi se u Samsung Galaxy A8), Airoha (Mediatek/EcoNet) EN7523, Mediatek mt6582 (tableta Prestigio PMT5008 3G), Microchip Lan966, Renesas RZ/G2LC, RZ/V2L, Tesla FSD, TI K3/AM62 i i.MXRTxxxx.
- Dodata je podrška za ARM uređaje i ploče Broadcom (Raspberry Pi Zero 2 W), Qualcomm (Google Herobrine R1 Chromebook, SHIFT6mq, Samsung Galaxy Book2), Rockchip (Pine64 PineNote, Bananapi-R2-Pro, STM32 Emtrion emSBS, Samsung Galaxy Tab S, Prestigio PMT5008 3G tablet), Allwinner (A20-Marsboard), Amlogic (Amediatek X96-AIR, CYX A95XF3-AIR, Haochuangy H96-Max, Amlogic AQ222 i OSMC Vero 4K+), Aspeed (Quanta S6Q, ASRock ROMED8HM3), Marvell MVEBU/Armada (Ctera C200 V1 i V2 NAS), Mstar (DongShanPiOne, Miyoo Mini), NXP i.MX (Protonic PRT8MM, emCON-MX8M Mini, Toradex Verdin, Gateworks GW7903).
- Dodata je podrška za zvučne sisteme i kodeke AMD PDM, Atmel PDMC, Awinic AW8738, i.MX TLV320AIC31xx, Intel CS35L41, ESSX8336, Mediatek MT8181, nVidia Tegra234, Qualcomm SC7280, Renesas RZ/V2L, Texas Instruments TAS585M. Implementacija zvučnog drajvera za DSP čip Intel AVS je započeta. Ažurirana je podrška za drajvere za Intel ADL i Tegra234, kao i izvršene izmene za poboljšanje podrške za zvuk na uređajima Dell, HP, Lenovo, ASUS, Samsung i Clevo.
U isto vrijeme, Latinskoamerička zaklada za slobodan softver oblikovala je varijantu potpuno slobodnog kernela 5.18 — Linux-libre 5.18-gnu, očišćenog od elemenata firmwarea i drajvera koji sadrže neslobodne komponente ili dijelove koda čija primjena je ograničena od strane proizvođača. U novom izdanju izvršeno je čišćenje drajvera za MIPI DBI panele, VPU Amphion, WiFi MediaTek MT7986 WMAC, Mediatek MT7921U (USB) i Realtek 8852a/8852c, zvučne čipove Intel AVS i Texas Instruments TAS5805M. Također, izvršeno je čišćenje DTS datoteka za različite SoC Qualcomm s procesorima temeljenim na arhitekturi AArch64. Ažuriran je kod čišćenja blobova u drajverima i podsistemima AMD GPU, MediaTek MT7915, Silicon Labs WF200+ WiFi, Mellanox Spectrum Ethernet, Realtek rtw8852c, Qualcomm Q6V5, Wolfson ADSP, MediaTek HCI UART.
Izvor: opennet.ru
