Izdaja jedra Linuxa 5.8

Po dveh mesecih razvoja, Linus Torvalds uveden izdaja jedra Linux 5.8. Med najbolj opaznimi spremembami: detektor pogojev tekmovanja KCSAN, univerzalni mehanizem za dostavo obvestil v uporabniški prostor, podpora strojne opreme za inline enkripcijo, izboljšani varnostni mehanizmi za ARM64, podpora za ruski procesor Baikal-T1, možnost ločene namestitve primerkov procfs , implementacija varnostnih mehanizmov Shadow za ARM64 Call Stack in BTI.

Jedro 5.8 je postalo največje po številu sprememb vseh jeder v celotnem obstoju projekta. Poleg tega spremembe niso povezane z nobenim podsistemom, temveč zajemajo različne dele jedra in so v glavnem povezane z notranjimi predelavami in čiščenjem. Največje spremembe so vidne pri voznikih. Nova različica je vsebovala 17606 popravkov 2081 razvijalcev, ki so vplivali na približno 20 % vseh datotek v skladišču kode jedra. Velikost popravka je 65 MB (spremembe so vplivale na 16180 datotek, dodanih je bilo 1043240 vrstic kode, izbrisanih je bilo 489854 vrstic). Za primerjavo, veja 5.7 je imela 15033 popravkov in velikost popravka 39 MB. Približno 37 % vseh sprememb, uvedenih v 5.8, je povezanih z gonilniki naprav, približno 16 % sprememb je povezanih s posodabljanjem kode, specifične za arhitekture strojne opreme, 11 % je povezanih z omrežnim skladom, 3 % je povezanih z datotečnimi sistemi in 4 % so povezani z notranjimi podsistemi jedra.

Glavni inovacije:

  • Virtualizacija in varnost
    • Zagotovljeno je nalaganje modulov jedra, ki imajo razdelke s kodo, v kateri so hkrati nastavljeni biti, ki omogočajo izvajanje in pisanje. Sprememba je bila izvedena kot del večjega projekta, da bi jedro osvobodili uporabe pomnilniških strani, ki omogočajo hkratno izvajanje in pisanje.
    • Zdaj je mogoče ustvariti ločene primerke procfs, kar omogoča uporabo več točk vpetja procfs, nameščenih z različnimi možnostmi, vendar odražajo isti imenski prostor identifikatorja procesa (imenski prostor pid). Prej so vse točke vpenjanja procfs zrcalile samo eno notranjo predstavitev in vsaka sprememba parametrov vpenjanja je vplivala na vse druge točke vpenjanja, povezane z istim imenskim prostorom ID-ja procesa. Med področji, na katerih je lahko povpraševanje po montaži z različnimi možnostmi, je izvedba lahke izolacije za vgrajene sisteme z možnostjo skrivanja določenih vrst procesov in informacijskih vozlišč v procfs.
    • Podpora za mehanizem je bila implementirana za platformo ARM64
      Shadow-Call Stack, ki ga zagotavlja prevajalnik Clang za zaščito pred prepisovanjem povratnega naslova funkcije v primeru prekoračitve medpomnilnika sklada. Bistvo zaščite je shraniti povratni naslov v ločenem "senčnem" skladu po prenosu nadzora na funkcijo in pridobiti ta naslov pred izhodom iz funkcije.

    • Za platformo ARM64 je bila dodana podpora za navodila ARMv8.5-BTI (Branch Target Indicator) za zaščito izvajanja nizov navodil, na katere se ne sme razvejati. Blokiranje prehodov na poljubne dele kode je implementirano, da se prepreči ustvarjanje pripomočkov v podvigih, ki uporabljajo tehnike povratno usmerjenega programiranja (ROP - Return-Oriented Programming; napadalec ne poskuša postaviti svoje kode v pomnilnik, ampak deluje na že obstoječih delih strojnih ukazov, ki se končajo z ukazom povratnega nadzora, iz katerega je zgrajena veriga klicev za pridobitev želene funkcionalnosti).
    • Dodana strojna podpora za vgrajeno šifriranje blokovnih naprav (Vgrajeno šifriranje). Naprave za šifriranje Inlinep so običajno vgrajene v pogon, vendar so logično nameščene med sistemskim pomnilnikom in diskom ter pregledno šifrirajo in dešifrirajo V/I na podlagi ključev, določenih v jedru, in šifrirnega algoritma.
    • Dodana možnost ukazne vrstice jedra "initrdmem", ki vam omogoča, da določite naslov fizičnega pomnilnika initrd, ko postavljate začetno zagonsko sliko v RAM.
    • Dodana nova zmožnost: CAP_PERFMON za dostop do podsistema perf in izvajanje spremljanja zmogljivosti. CAP_BPF, ki omogoča določene operacije BPF (kot je nalaganje programov BPF), ki so prej zahtevale pravice CAP_SYS_ADMIN (pravice CAP_SYS_ADMIN so zdaj razdeljene na kombinacijo CAP_BPF, CAP_PERFMON in CAP_NET_ADMIN).
    • Dodana nova virtio-mem naprava, ki vam omogoča vročo in vročo priključitev pomnilnika v sisteme za goste.
    • Implementiran priklic operacij preslikave v /dev/mem, če gonilnik naprave uporablja prekrivajoča se pomnilniška območja.
    • Dodana zaščita pred ranljivostmi CROSSTalk/SRBDS, ki vam omogoča obnovitev rezultatov izvajanja nekaterih ukazov, izvedenih na drugem jedru procesorja.
  • Pomnilniške in sistemske storitve
    • V dokumentu, ki določa pravila za oblikovanje kode, sprejeto priporočila za uporabo vključujoče terminologije. Razvijalcem ni priporočljivo uporabljati kombinacij 'master / slave' in 'blacklist / whitelist' ter besede 'slave' ločeno. Priporočila zadevajo samo nove uporabe teh izrazov. Omembe navedenih besed, ki že obstajajo v jedru, bodo ostale nedotaknjene. V novi kodi je uporaba označenih izrazov dovoljena, če je to potrebno za podporo API in ABI, ki sta izpostavljena v uporabniškem prostoru, kot tudi pri posodabljanju kode za podporo obstoječe strojne opreme ali protokolov, katerih specifikacije zahtevajo uporabo določenih izrazov.
    • Priloženo orodje za odpravljanje napak KCSAN (Kernel Concurrency Sanitizer), zasnovan za dinamično zaznavanje pogoji dirke znotraj jedra. Uporaba KCSAN je podprta pri gradnji v GCC in Clang in zahteva posebne spremembe v času prevajanja za sledenje dostopu do pomnilnika (uporabljajo se prelomne točke, ki se sprožijo, ko je pomnilnik prebran ali spremenjen). Poudarek razvoja KCSAN je bil na preprečevanju lažnih pozitivnih rezultatov, razširljivosti in enostavni uporabi.
    • Dodano univerzalni mehanizem dostava obvestil iz jedra v uporabniški prostor. Mehanizem temelji na standardnem gonilniku cevi in ​​vam omogoča učinkovito distribucijo obvestil iz jedra po kanalih, odprtih v uporabniškem prostoru. Točke za prejemanje obvestil so cevi, ki se odprejo v posebnem načinu in omogočajo zbiranje sporočil, prejetih iz jedra, v medpomnilniku obroča. Branje izvaja običajna funkcija read(). Lastnik kanala določi, katere vire v jedru je treba spremljati, in lahko definira filter, ki prezre določene vrste sporočil in dogodkov. Od dogodkov so trenutno podprte le operacije s ključi, kot je dodajanje/odstranjevanje ključev in spreminjanje njihovih atributov. Ti dogodki so načrtovani za uporabo v GNOME.
    • Nadaljnji razvoj funkcionalnosti 'pidfd' za pomoč pri obvladovanju situacij ponovne uporabe PID (pidfd je povezan z določenim procesom in se ne spreminja, medtem ko je PID lahko povezan z drugim procesom, potem ko se trenutni proces, povezan s tem PID-om, zaključi). Nova različica dodaja podporo za uporabo pidfd za pripenjanje procesa imenskim prostorom (kar omogoča podajanje pidfd pri izvajanju sistemskega klica setns). Uporaba pidfd vam omogoča nadzor pripenjanja procesa na več vrst imenskih prostorov z enim klicem, kar znatno zmanjša število potrebnih sistemskih klicev in implementacijo pripenjanja v atomskem načinu (če pripenjanje k enemu od imenskih prostorov ne uspe, se drugi ne bodo povezali) .
    • Dodan nov sistemski klic facesat2(), ki se razlikuje od
      facesat() dodaten argument z zastavicami, ki ustrezajo priporočilom POSIX (prej so bile te zastavice emulirane v knjižnici C, novi faccessat2 pa omogoča njihovo implementacijo v jedro).

    • V skupini C dodano nastavitev memory.swap.high, ki jo lahko uporabite za upočasnitev opravil, ki zavzamejo preveč prostora za izmenjavo.
    • Na asinhroni V/I vmesnik io_uring dodana podpora za sistemski klic tee().
    • Dodan mehanizem "iterator BPF, zasnovan za izpis vsebine struktur jedra v uporabniški prostor.
    • Zagotovljeno možnost uporabe obročnega medpomnilnika za izmenjavo podatkov med programi BPF.
    • V mehanizem padata, zasnovan za organizacijo vzporednega izvajanja nalog v jedru, dodana podpora za večnitne naloge z uravnoteženjem obremenitve.
    • V mehanizmu pstore, ki vam omogoča shranjevanje informacij za odpravljanje napak o vzroku zrušitve v pomnilniška področja, ki se ne izgubijo med ponovnimi zagoni, dodano zaledje za shranjevanje informacij v blokirne naprave.
    • Iz veje jedra PREEMPT_RT premaknjen izvedba lokalnih zapornic.
    • Dodano nov API za dodelitev medpomnilnika (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 v komponentah jedra z uporabo KGDB.
    • Pred izdajo 4.8 so bile povečane zahteve za različico GCC, ki se lahko uporablja za gradnjo jedra. V eni od naslednjih izdaj je načrtovan dvig na GCC 4.9.
  • Diskovni podsistem, V/I in datotečni sistemi
    • V aplikaciji Device Mapper dodano nov upravljalnik dm-ebs (emulate block size), ki ga je mogoče uporabiti za posnemanje manjše logične velikosti bloka (na primer za posnemanje 512-bajtnih sektorjev na diskih s sektorsko velikostjo 4K).
    • Datotečni sistem F2FS zdaj podpira stiskanje z uporabo algoritma LZO-RLE.
    • V dm-kripti dodano podpora za šifrirane ključe.
    • Btrfs je izboljšal upravljanje operacij branja v neposrednem V/I načinu. Pri montaži pospešeno preverjanje izbrisanih podrazdelkov in imenikov, ki so ostali brez nadrejenega.
    • V CIFS je bil dodan parameter »nodelete«, ki omogoča običajna preverjanja dovoljenj na strežniku, vendar odjemalcu prepoveduje brisanje datotek ali imenikov.
    • Ext4 ima izboljšano obravnavanje napak ENOSPC pri uporabi večnitnosti. xattr je dodal podporo za imenski prostor gnu.*, ki se uporablja v GNU Hurd.
    • Za Ext4 in XFS je omogočena podpora za operacije DAX (neposreden dostop do datotečnega sistema, mimo predpomnilnika strani brez uporabe ravni blokovne naprave) v zvezi s posameznimi datotekami in imeniki.
    • V sistemskem klicu statx() dodana zastava STATX_ATTR_DAX, ki, ko je določeno, pridobi informacije z uporabo mehanizma DAX.
    • IZLUŠČEK dodano podpora za preverjanje zagonskega območja.
    • V FAT izboljšan proaktivno nalaganje elementov FS. Testiranje počasnega pogona USB s kapaciteto 2 TB je pokazalo skrajšanje časa dokončanja testa s 383 na 51 sekund.
  • Omrežni podsistem
    • V kodi za nadzor delovanja omrežnih mostov dodano podpora protokolu MRP (Media Redundancy Protocol), ki omogoča toleranco napak z zanko več stikal Ethernet.
    • Na sistem za nadzor prometa (Tc) dodano nova “gate” akcija, ki omogoča definiranje časovnih intervalov za obdelavo in zavrženje določenih paketov.
    • Jedru in pripomočku ethtool je dodana podpora za testiranje priključenega omrežnega kabla in samodiagnozo omrežnih naprav.
    • Podpora za algoritem MPLS (Multiprotocol Label Switching) je bila dodana v sklad IPv6 za usmerjanje paketov z uporabo preklapljanja z več protokoli (MPLS je bil prej podprt za IPv4).
    • Dodana podpora za prenos paketov IKE (Internet Key Exchange) in IPSec prek TCP (RFC 8229), da zaobidete morebitno blokiranje UDP.
    • Dodana omrežna blokovna naprava rnbd, ki vam omogoča organiziranje oddaljenega dostopa do blokovne naprave s pomočjo RDMA transporta (InfiniBand, RoCE, iWARP) in protokola RTRS.
    • V skladu TCP dodano podpora za stiskanje obsega v odzivih selektivne potrditve (SACK).
    • Za IPv6 izvajati Podpora TCP-LD (RFC 6069, dolge motnje povezljivosti).
  • Оборудование
    • Gonilnik i915 DRM za grafične kartice Intel privzeto vključuje podporo za čipe Intel Tiger Lake (GEN12), za katere izvajati možnost uporabe sistema SAGV (System Agent Geyserville) za dinamično prilagajanje frekvence in napetosti glede na porabo energije ali zahteve glede zmogljivosti.
    • Gonilnik amdgpu je dodal podporo za format slikovnih pik FP16 in možnost dela s šifriranimi medpomnilniki v video pomnilniku (TMZ, Trusted Memory Zone).
    • Dodana podpora za senzorje moči za procesorje AMD Zen in Zen2 ter temperaturne senzorje za AMD Ryzen 4000 Renoir. Podpora za pridobivanje informacij o porabi energije prek vmesnika je na voljo za AMD Zen in Zen2 RAPL (Omejitev tekoče povprečne moči).
    • Gonilniku Nouveau je dodana podpora za obliko modifikatorja NVIDIA. Za gv100 je bila implementirana možnost uporabe prepletenih načinov skeniranja. Dodana definicija vGPU.
    • Gonilniku MSM (Qualcomm) je dodana podpora za grafične procesorje Adreno A405, A640 in A650.
    • Dodano notranji okvir za upravljanje virov DRM (Direct Rendering Manager).
    • Dodana podpora za pametne telefone Xiaomi Redmi Note 7 in Samsung Galaxy S2 ter prenosnike Chromebook Elm/Hana.
    • Dodani gonilniki za LCD plošče: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • Dodana podpora za plošče in platforme ARM 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 podpora za MIPS procesor Loongson-2K (skrajšano Loongson64). Za CPU Loongson 3 je bila dodana podpora za virtualizacijo s hipervizorjem KVM.
    • Dodano
      podpora za ruski procesor Baikal-T1 in sistem na čipu, ki temelji na njem BE-T1000. Procesor Baikal-T1 vsebuje dve superskalarni jedri P5600 MIPS 32 r5, ki delujeta na 1.2 GHz. Čip vsebuje predpomnilnik L2 (1 MB), DDR3-1600 ECC pomnilniški krmilnik, 1 10Gb Ethernet port, 2 1Gb Ethernet porta, krmilnik PCIe Gen.3 x4, 2 SATA 3.0 porta, USB 2.0, GPIO, UART, SPI, I2C. Procesor zagotavlja strojno podporo za virtualizacijo, navodila SIMD in integriran strojni kriptografski pospeševalnik, ki podpira GOST 28147-89. Čip je razvit z uporabo jedrne enote procesorja MIPS32 P5600 Warrior z licenco Imagination Technologies.

Istočasno Latinskoameriška fundacija za prosto programsko opremo oblikovana
možnost popolnoma brezplačno jedro 5.8 - Linux-libre 5.8-gnu, očiščen elementov vdelane programske opreme in gonilnikov, ki vsebujejo neproste komponente ali odseke kode, katerih obseg omejuje proizvajalec. Nova izdaja onemogoči nalaganje blob v gonilnike za Atom ISP Video, MediaTek 7663 USB/7915 PCIe, Realtek 8723DE WiFi, Renesas PCI xHCI, HabanaLabs Gaudi, Enhanced Asynchronous Sample Rate Converter, Maxim Integrated MAX98390 Speaker Amplifier, Microsemi ZL38060 Connected Home Audio Processor, in I2C EEPROM Slave. Posodobljena koda za čiščenje madežev v gonilnikih in podsistemih Adreno GPE, HabanaLabs Goya, zaslonu na dotik x86, vt6656 in btbcm.

Vir: opennet.ru

Dodaj komentar