После двух месяцев разработки Линус Торвальдс релиз ядра . Med najbolj opaznimi spremembi sta detektor stanj tekmovanja KCSAN in univerzalni mehanizem za dostavo obvestil v uporabniški prostor, podpora napravam za inline šifriranje, razširjeni zaščitni mehanizmi za ARM64, podpora ruskemu procesorju Baikal-T1, možnost ločenega montaže instanc procfs ter implementacija zaščitnih mehanizmov Shadow Call Stack in BTI za ARM64.
Jedro 5.8 je postalo največje doslej glede števila sprememb. Spremembe niso povezane z eno samo podproduktivnostjo, ampak pokrivajo različne dele jedra in so predvsem povezane z internimi predelavami in čiščenjem. Največ sprememb je bilo zaznanih pri gonilnikih. V novo različico je bilo sprejetih 17606 popravkov od 2081 razvijalcev, ki so zajeli približno 20% vseh datotek v repozitoriju s kodo jedra. Velikost popravka znaša 65 MB (spremembe so zajele 16180 datotek, dodanih je bilo 1043240 vrstic kode, odstranjenih 489854 vrstic). Za primerjavo, v veji 5.7 je bilo izvedenih 15033 popravkov, velikost popravka pa je znašala 39 MB. Približno 37% vseh sprememb v 5.8 je povezanih z gonilniki naprav, približno 16% sprememb je povezanih z posodobitvijo kode, specifične za strojno arhitekturo, 11% je povezano z omrežnim stekom, 3% z datotečnimi sistemi in 4% z notranjimi podproduktivnostmi jedra.
:
- Virtualizacija in varnost
- Zagotovljena je zaklepanje nalaganja modulov jedra, ki imajo sekcije s kodo, v katerih so hkrati nastavljeni biti, ki dovoljujejo izvajanje in zapisovanje. Sprememba je bila izvedena v okviru večjega projekta za odpravljanje jedra od uporabe strani pomnilnika, ki dovoljujejo hkratno izvajanje in zapisovanje.
- Pojavila se je možnost ustvarjanja ločenih primerkov procfs, ki omogočajo uporabo več točk za montažo procfs, pritrjenih z različnimi možnostmi, a odražajo en prostor imen identifikatorjev procesov (pid namespace). Prej so vse točke za montažo procfs odražale le eno notranje predstavitev in so se kakršne koli spremembe parametrov montaže odražale na vseh drugih točkah montaže, povezanih z istim prostorom imen identifikatorjev procesov. Med področji, kjer je morda potrebna montaža z različnimi možnostmi, je realizacija lahke izolacije za vgrajene sisteme z možnostjo skrivanja določenih vrst procesov in informacijskih vozlišč v procfs.
- Za platformo ARM64 je bila implementirana podpora za mehanizem
, ki ga zagotavlja prevajalnik Clang za zaščito pred prepisovanjem naslova vračila iz funkcije v primeru prelivanja pomnilnika na skladu. Bistvo zaščite je v shranjevanju naslova vračila v ločenem 'senčnem' skladu po prenosu nadzora na funkcijo in pridobivanju tega naslova pred izhodom iz funkcije. - Za platformo ARM64 je bila dodana podpora za ukaze (Branch Target Indicator) za zaščito izvajanja nizov ukazov, na katere ne bi smelo priti do prehodov pri veji. Blokiranje prehodov na poljubna območja kode je implementirano za preprečevanje ustvarjanja gadgetov v eksploatih, ki uporabljajo tehnike zaslona z vrati (ROP - Return-Oriented Programming; napadalec ne poskuša postaviti svoje kode v pomnilnik, temveč upravlja že obstoječe dele strojnih ukazov, ki se končujejo z ukazom za vračilo nadzora, iz katerih sestavlja verigo klicev za pridobitev želene funkcionalnosti).
- Dodana je podpora za strojno opremo za inline-šifriranje blokovnih naprav (). Naprave za inline-šifriranje so običajno vgrajene v pomnilnik, vendar logično postavljene med sistemskim pomnilnikom in diskom, in izvajajo pregledno šifriranje in dešifriranje vhodnih/izhodnih podatkov na podlagi ključev in algoritma šifriranja, ki jih določi jedro.
- Dodana je parameter ukazne vrstice jedra 'initrdmem', ki omogoča določitev fizične lokacije initrd v pomnilniku pri nalaganju začetne zagonske slike v RAM.
- Dodane nove sposobnosti: CAP_PERFMON za pristup perf podsistemu i izvođenje nadzora performansi. , omogućavajući izvršavanje nekih operacija s BPF (na primjer, učitavanje BPF programa), koje su ranije zahtevale prava CAP_SYS_ADMIN (sada su ovlasti CAP_SYS_ADMIN podeljene na kombinaciju CAP_BPF, CAP_PERFMON i CAP_NET_ADMIN).
- novo virtio-mem uređaj koje omogućava vruće povezivanje i isključivanje memorije za gostujuće sisteme.
- Implementirano povlačenje operacija mapiranja u /dev/mem, ako uređaj drajvera koristi preklapajuće oblasti memorije.
- Dodana zaščita pred ranljivostjo , omogućavajući restauraciju rezultata izvršenja nekih instrukcija koje se izvršavaju na drugom CPU jezgru.
- Pomnilnik in sistemske storitve
- U dokumentu koji definiše pravila za formatiranje koda, preporuke za upotrebu inkluzivne terminologije. Razvijateljima se ne preporučuje korišćenje termina 'master/slave' i 'blacklist/whitelist', kao i reči 'slave' samostalno. Preporuke se odnose samo na novu upotrebu ovih termina. Već postojeće upotrebe ovih reči u jezgru će ostati nepromenjene. U novom kodu dozvoljena je upotreba označenih termina ako to zahteva održavanje API i ABI koji se izlažu korisničkom prostoru, kao i prilikom ažuriranja koda za podršku postojećim uređajima ili protokolima, čije specifikacije zahtevaju korišćenje određenih termina.
- Uključeni su debagerski alati (Kernel Concurrency Sanitizer), namenjen za dinamičko otkrivanje unutar jezgra. Korišćenje KCSAN podržano je pri izradi u GCC i Clangu i zahteva dodavanje posebnih modifikacija u fazi kompajliranja za praćenje pristupa memoriji (primenjuju se tačke prekida koje se aktiviraju prilikom čitanja ili menjanja memorije). Glavna pažnja prilikom razvoja KCSAN bila je usmerena na sprečavanje lažnih upozorenja, skalabilnost i jednostavnost korišćenja.
- Dodano dostave obvestil iz jedra v uporabniški prostor. Mehanizem temelji na običajnem drajverju pipe in omogoča učinkovito razporejanje obvestil iz jedra po kanalih, odprtih v uporabniškem prostoru. Točke sprejema obvestil so pipe, odprte v posebnem načinu in omogočajo kopičenje sporočil iz jedra v obročnem predpomnilniku. Branje se izvede z običajno funkcijo read(). Lastnik kanala določi, katere vire v jedru je treba spremljati in lahko določi filtriranje za ignoriranje sporočil in dogodkov določenega tipa. Zaenkrat podpiramo le operacije s ključi, kot so dodajanje/odstranjevanje ključev in sprememba njihovih atributov. Načrtujemo uporabo navedenih dogodkov v GNOME.
- Razvoj funkcionalnosti 'pidfd' se je nadaljeval, kar pomaga pri obdelavi situacij s ponovnim uporabo PID (pidfd je povezan s specifičnim procesom in se ne spremeni, medtem ko se lahko PID poveže z drugim procesom po končanju trenutnega procesa, povezanega s tem PID). V novi različici je bila dodana podpora za uporabo pidfd za pripenjanje procesov k imenskim prostorom (dovoljeno je določanje pidfd pri izvajanju sistemskega klica setns). Uporaba pidfd omogoča z enim klicem upravljanje pripenjanja procesa k več tipom imenskih prostorov, kar znatno skrajša število potrebnih sistemskih klicev in izvaja pripenjanje v atomski način (če pride do napake pri pripenjanju k enemu izmed imenskih prostorov, se ne bodo pripenjali tudi ostali).
- Dodana je bila nova sistemska klica faccessat2(), ki se razlikuje od
po dodatnem argumentu s zastavicami, ki ustrezajo priporočilom POSIX (prej so te zastavice emulirali v C knjižnici, nova faccessat2 pa omogoča njihovo realizacijo v jedru). - V Cgroup nastavitev memory.swap.high, ki jo lahko uporabimo za upočasnitev nalog, ki zasedajo preveč prostora v razdelku za izmenjavo.
- V vmesnik asinhronega vnosa/izvoda dodana podpora za sistemski klic tee().
- Dodan je mehanizem ', namenjen za izhod v uporabniški prostor vsebine struktur jedra.
- možnost uporabe obročnega predpomnilnika za izmenjavo podatkov med BPF programi.
- V mehanizmu , namen za organizacijo hkratnega izvajanja nalog v jedru, je bila dodana podpora za večnitne naloge z uravnoteženjem obremenitve.
- V mehanizmu pstore, ki omogoča shranjevanje informacij za odpravljanje napak o vzroku zrušitve v pomnilniku, ki se ne izgubijo med ponovnimi nalaganji, backend za shranjevanje informacij na blokovnih napravah.
- Iz veje jedra PREEMPT_RT implementacija lokalnih zaklepanj.
- nov API za dodeljevanje pomnilnika (AF_XDP), namenjen poenostavitvi pisanja omrežnih gonilnikov s podporo XDP (eXpress Data Path).
- Za arhitekturo RISC-V je bila implementirana podpora za odpravljanje napak komponent jedra s pomočjo KGDB.
- Pred izdajo 4.8 so se povečale zahteve glede različice GCC, ki se lahko uporablja za sestavljanje jedra. V enem od naslednjih izdaj se načrtuje dvig do GCC 4.9.
- Дисковая подсистема, ввод/вывод и файловые системы
- V Device Mapper nov obdelovalnik dm-ebs (emulate block size), ki se lahko uporablja za emulator manjšega logičnega bloka (na primer, za emulacijo 512-bajtnih sektorjev na diskih z velikostjo sektorja 4K).
- V datotečnem sistemu F2FS je bila dodana podpora za stiskanje z uporabo algoritma LZO-RLE.
- V dm-crypt podpora za šifrirane ključe.
- V Btrfs je bila izboljšana obdelava operacij branja v načinu neposrednega vnosa/izhoda. Pri montiranju preverjanje oddaljenih poddelov in map, ki niso več pod staršem.
- V CIFS je bila dodana nastavitev „nodelete“, ki dovoljuje običajne preglede dovoljenj na strežniku, vendar prepoveduje odjemalcu brisanje datotek ali map.
- V Ext4 je bila izboljšana obdelava napake pri uporabi večnitnosti. V xattr je bila dodana podpora za prostor imen gnu.*, ki se uporablja v GNU Hurd.
- Za Ext4 in XFS je bila vključena podpora za operacije DAX ( neposredni dostop do FS mimo predpomnilnika strani brez uporabe nivoja blokovnih naprav) v navezavi na posamezne datoteke in mape.
- V sistemski klic dodati flag , pri čemer se podatki pridobivajo z mehanizmom DAX.
- V EXFAT podpora za preverjanje zagonskega območja.
- V FAT napovedano nalaganje elementov FS. Testiranje počasnega 2TB USB-ponosnika je pokazalo zmanjšanje časa trajanja testa s 383 na 51 sekund.
- Mrežna podsistem
- V kodi za upravljanje delovanja omrežnih mostov podpora protokolu (Media Redundancy Protocol), ki omogoča zagotavljanje odpornosti, povezanjem več Ethernet-stikala.
- V sistem za upravljanje prometa (Tc) nova akcija "gate", ki omogoča določanje časovnih intervalov za obdelavo in zavračanje določenih paketov.
- Jedru in pripomočku ethtool je dodana podpora funkcij testiranja priključenega omrežnega kabla in samodiagnostike omrežnih naprav.
- IPv6-stek je obogaten s podporo algoritma MPLS (Multiprotocol Label Switching) za usmerjanje paketov z uporabo večprotokolne preklopne tehnike z oznakami (MPLS za IPv4 je bil podprt že prej).
- Dodana je podpora za prenos paketov IKE (Internet Key Exchange) in IPSec preko TCP () za obvladovanje morebitnih blokad UDP.
- Omrežno blokovno napravo rnbd, ki omogoča oddaljen dostop do blokovne naprave s prevoznim sredstvom RDMA (InfiniBand, RoCE, iWARP) in protokolom RTRS.
- V TCP-steku podpora stiskanja razpona v odgovorih na selektivno potrditev (selective acknowledgment, SACK).
- Za IPv6 podpora TCP-LD (, Long Connectivity Disruptions).
- Oprema
- V DRM-napovedniku i915 za grafične kartice Intel je privzeto vključena podpora za čipe Intel Tiger Lake (GEN12), za katere je prav tako možnost uporabe sistema SAGV (System Agent Geyserville) za dinamično prilagajanje frekvence in napetosti glede na zahteve po porabi energije ali zmogljivosti.
- V gonilniku amdgpu je dodana podpora za slikovni format FP16 in omogočeno delo s šifriranimi pomnilniki v video pomnilniku (TMZ, Trusted Memory Zone).
- Dodana je podpora za senzorje porabe energije procesorjev AMD Zen in Zen2 ter senzorje temperature AMD Ryzen 4000 Renoir. Za AMD Zen in Zen2 je omogočena podpora za pridobivanje informacij o porabi energije preko vmesnika (Running Average Power Limit).
- V gonilniku Nouveau je dodana podpora za format modifierjev NVIDIA. Za gv100 je uvedena možnost uporabe prepletnih načinov izrisovanja. Dodano je določanje vGPU.
- V gonilniku MSM (Qualcomm) je dodana podpora za GPU Adreno A405, A640 in A650.
- interni okvir za upravljanje z viri DRM (Direct Rendering Manager).
- Dodana je podpora za pametne telefone Xiaomi Redmi Note 7 in Samsung Galaxy S2 ter prenosne računalnike Elm/Hana Chromebook.
- Dodani so gonilniki za LCD-panele: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
- Dodana je podpora za ARM-plošče in platforme Renesas "RZ/G1H", Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-LIME-eMMC, Check Point L-50,
, Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI. - Dodana je podpora za MIPS procesor Loongson-2K (skrajšano Loongson64). Za CPU Loongson 3 je dodana podpora za virtualizacijo z uporabo hipervizorja KVM.
-
podpora za ruski procesor Baikal-T1 in na njem temelječo sistemsko rešitev na čipu . Procesor Baikal-T1 vsebuje dve superskalarni jedri P5600 MIPS 32 r5, ki delujeta pri frekvenci 1,2 GHz. Čip vključuje L2 predpomnilnik (1 MB), DDR3-1600 ECC pomnilniški krmilnik, 1 port 10Gb Ethernet, 2 porta 1Gb Ethernet, PCIe Gen.3 x4 krmilnik, 2 porta SATA 3.0, USB 2.0, GPIO, UART, SPI, I2C. Procesor nudi strojno podporo za virtualizacijo, SIMD instrukcije in integriran strojni pospeševalnik kriptografskih operacij, ki podpira GOST 28147-89. Čip je bil razvit z uporabo licencirane MIPS32 P5600 Warrior procesorske enote podjetja Imagination Technologies.
Istovremeno latinskoamerička Fondacija slobodnog softvera
varijantu — , očiščen od elementov gonilnikov in programske opreme, ki vsebujejo prosto omejene komponente ali kode, katere uporaba je omejena s strani proizvajalca. V novi različici je onemogočeno nalaganje blobov v gonilnikih za Atom ISP Video, MediaTek 7663 USB/7915 PCIe, Realtek 8723DE WiFi, Renesas PCI xHCI, HabanaLabs Gaudi, izboljšani asinkroni pretvornik vzorčne frekvence, Maxim Integrated MAX98390 Speaker Amplifier, Microsemi ZL38060 Connected Home Audio Processor in I2C EEPROM Slave. Posodobljen je tudi koda za čiščenje blobov v gonilnikih in podsystemih Adreno GPU, HabanaLabs Goya, x86 zaslon na dotik, vt6656 in btbcm.
Izvor: opennet.ru
