Utgjeving av Linux-kjernen 5.8

Etter to måneder med utvikling av Linus Torvalds har presentert utgjeving av kjernen Linux 5.8. Blant de mest bemerkelsesverdige endringene er KCSAN-race condition detector, et universelt mekanisme for varslinger til brukerrammeverket, støtte for maskinvare for inline-kryptering, utvidede beskyttelsesmekanismer for ARM64, støtte for den russiske prosessoren Baikal-T1, muligheten for separat montering av instanser av procfs, samt implementering av beskyttelsesmekanismer for ARM64 med Shadow Call Stack og BTI.

Kjernen 5.8 har blitt den største med hensyn til antall endringer i prosjektets historie. Endringene er ikke begrenset til et enkelt subsystem, men dekker forskjellige deler av kjernen og er hovedsakelig relatert til interne omarbeidinger og opprydning. Det er størst antall endringer i driverne. Den nye versjonen inneholder 17606 rettelser fra 2081 utviklere, som berører omtrent 20 % av alle filene i kjernens kode-repository. Størrelsen på oppdateringen er 65 MB (endringene berørte 16180 filer, 1043240 linjer med kode ble lagt til, 489854 linjer ble fjernet). Til sammenligning ble det gjort 15033 endringer i versjon 5.7, med en oppdateringsstørrelse på 39 MB. Omtrent 37 % av endringene i 5.8 er relatert til enhetsdrivere, rundt 16 % er knyttet til oppdatering av maskinvare-spesifikk kode, 11 % er relatert til nettverksstakken, 3 % til filsystemene og 4 % til interne subsystemer i kjernen.

Viktige nyheter:

  • Virtualisering og sikkerhet
    • Det er implementert blokkering av lasting av kjernemoduler som har seksjoner med kode der det samtidig er satt biter som tillater både utførelse og skriving. Endringen er gjennomført som en del av et større prosjekt for å fjerne bruken av minnesider som tillater både utførelse og skriving.
    • Det er nå mulighet for å opprette separate instanser av procfs, som gjør det mulig å bruke flere monteringspunkter for procfs, montert med forskjellige alternativer, men som reflekterer et felles prosess-ID-navnerom (pid namespace). Tidligere reflekterte alle monteringspunkter for procfs bare én intern representasjon, og enhver endring av monteringsparameterne påvirket alle de andre monteringspunktene knyttet til det samme prosess-ID-navnerommet. Områdene der det kan være behov for montering med forskjellige alternativer, inkluderer implementering av lettvektsisolering for innebygde systemer, med mulighet for å skjule bestemte typer prosesser og informasjonsnoder i procfs.
    • For ARM64-plattformen er det implementert støtte for mekanismen
      Shadow-Call Stack, levert av Clang-kompilatoren for beskyttelse mot overskrivning av returadressen fra en funksjon ved bufferoverflow i stakken. Beskyttelsen går ut på at adressen til returstedet blir lagret på en separat «skygge»-stabel og hentes tilbake før programmet forlater funksjonen.
    • For ARM64-plattformen er støtte for instruksjonene ARMv8.5-BTI (Branch Target Indicator) lagt til for å beskytte utførelsen av instruksjonssett der det ikke skal kunne gjøres overganger ved forgrening. Blokkering av overganger til vilkårlige deler av koden er implementert for å motvirke opprettelsen av gadgets i utnyttelser som bruker teknikker for returorientert programmering (ROP – Return-Oriented Programming, der angriperen ikke prøver å plassere sin egen kode i minnet, men arbeider med eksisterende biter av maskininstruksjoner som slutter med en returkommando og som danner en kjede av anrop for å oppnå ønsket funksjonalitet).
    • Det er lagt til støtte for maskinvare for inline-kryptering av blokkenheter (Inline Encryption). Inline-krypteringsenheter er vanligvis innebygd i lagringsenheten, men plasseres logisk mellom systemminnet og disken, og utfører gjennomsiktig kryptering og dekryptering av inn-/utdata basert på kjerneparameterne for nøkler og krypteringsalgoritmer.
    • Det er lagt til et kommandolinjeparameter for kjernen kalt «initrdmem», som tillater spesifikasjon av den fysiske adressen for plasseringen av initrd i minnet når det plasseres en oppstartsbilde i RAM.
    • Nye funksjoner lagt til: CAP_PERFMON for tilgang til perf-subsystemet og utføring av ytelsesovervåking. CAP_BPF, som tillater utførelse av enkelte operasjoner med BPF (for eksempel lasting av BPF-programmer), som tidligere krevde rettigheter fra CAP_SYS_ADMIN (nå er rettighetene til CAP_SYS_ADMIN delt opp i kombinasjonen CAP_BPF, CAP_PERFMON og CAP_NET_ADMIN).
    • Lagt til en ny virtio-mem-enhet som muliggjør varm tilkobling og frakobling av minne i gjestesystemer.
    • Implementert tilbaketrekning av mapping-operasjoner i /dev/mem, hvis enhetsdriveren bruker overlappende minneområder.
    • Inkludert beskyttelse mot sårbarheten CROSSTalk/SRBDS, som gjør det mulig å gjenopprette resultater fra noen instruksjoner som kjøres på en annen CPU-kjerne.
  • Minne og systemtjenester
    • I dokumentet som definerer retningslinjene for koding, vedtatt anbefalinger for bruk av inkluderende terminologi. Utviklere anbefales å unngå uttrykk som ‘master/slave’ og ‘blacklist/whitelist’, samt ordet ‘slave’ alene. Anbefalingene gjelder bare ny bruk av disse termene. Allerede eksisterende referanser til disse ordene i kjernen vil forbli uendret. I ny kode tillates bruken av de nevnte termene dersom det er nødvendig for å opprettholde den API og ABI som gis til brukerrens. Dette gjelder også ved oppgradering av kode for å støtte eksisterende maskinvare eller protokoller, spesifikasjoner som forskriver bruk av bestemte termer.
    • Inkludert et feilsøkingsverktøy KCSAN (Kernel Concurrency Sanitizer), designet for dynamisk oppdagelse av kappløpsforhold i kjernen. Bruken av KCSAN støttes ved staving med GCC og Clang, og krever spesielle modifikasjoner under kompileringen for å spore minnetilgang (stoppesteder aktiveres ved lesing eller endring av minnet). Hovedfokuset i utviklingen av KCSAN har vært å forhindre falske alarmer, skalérbarhet og brukervennlighet.
    • Inkludert et universelt mekanisme levering av varsler fra kjernen til brukerrommet. Mechanismen er basert på standard pipe-driver og lar effektivt fordele varsler fra kjernen til åpne kanaler i brukerrommet. Mottakspunktene for varsler er pipe-er som er åpnet i spesialmodus og gjør det mulig å samle inn meldinger fra kjernen i en ringbuffer. Lesingen skjer med den vanlige funksjonen read(). Kanalens eier bestemmer hvilke kilder i kjernen som skal overvåkes og kan sette filter for å ignorere meldinger og hendelser av en bestemt type. For øyeblikket støttes bare hendelser med nøkler, som å legge til/fjerne nøkler og endre deres attributter. De spesifiserte hendelsene planlegges brukt i GNOME.
    • Utviklingen av funksjonaliteten ‘pidfd’ fortsetter, som hjelper med å håndtere situasjoner med gjenbruk av PID (pidfd er bundet til en spesifikk prosess og endres ikke, mens PID kan bindes til en annen prosess etter at den nåværende prosessen assosiert med denne PID er fullført). I den nye versjonen er det lagt til støtte for å bruke pidfd for å knytte prosesser til navnerom (det er tillatt å spesifisere pidfd når systemkallet setns utføres). Bruken av pidfd gjør det mulig å administrere knyttingen av prosessen til flere typer navnerom med ett kall, noe som betydelig reduserer antallet nødvendige systemanrop og implementerer knytting i atomær modus (hvis det oppstår en feil ved knytting til ett av navnerommene, vil ikke de andre knyttes også).
    • En ny systemanrop faccessat2() er lagt til, og skiller seg fra
      faccessat() med et ekstra argument med flagg som tilsvarer POSIX-anbefalingene (tidligere ble disse flaggene emulert i C-biblioteket, mens den nye faccessat2 lar dem implementeres i kjernen).
    • I Cgroup er det lagt til innstillingen memory.swap.high kan brukes til å bremse oppgaver som tar for mye plass i bytteområdet.
    • I brukergrensesnittet for asynkron I/O io_uring er det lagt til støtte for systemanrop tee().
    • En mekanisme forBPF iteratorer lagt til, som er ment for å skrive ut innholdet i kjerneastructurer til brukerrommet.
    • Det er gitt muligheten for å bruke ringbuffer for datadeling mellom BPF-programmer.
    • I mekanismen padata, designet for å organisere parallell utførelse av oppgaver i kjernen, er støtte for flertrådede oppgaver med lastbalansering lagt til.
    • I pstore-mekanismen, som lar deg lagre feilmeldingsinformasjon om årsaken til krasj i minnet, som ikke går tapt mellom omstarter, er lagt til backend for lagring av informasjon på blokkerte enheter.
    • Fra PREEMPT_RT-kjernens gren ble flyttet implementeringen av lokale låser.
    • Inkludert nytt API for allokering av buffere (AF_XDP), rettet mot å forenkle skrivingen av nettverksdrivere med støtte for XDP (eXpress Data Path).
    • For RISC-V-arkitekturen er støtte for feilsøking av kjernens komponenter implementert med KGDB.
    • Før utgivelsen av 4.8 er kravene til versjon av GCC som kan brukes til å bygge kjernen hevet. I en av de følgende utgivelsene er det planlagt å heve grensen til GCC 4.9.
  • Disk subsystem, I/O og filsystemer
    • I Device Mapper er lagt til ny behandler dm-ebs (emulate block size), som kan brukes til å emulere en mindre logisk blokkstørrelse (for eksempel for å emulere 512-byte sektorer på disker med en sektorstørrelse på 4K).
    • I F2FS-filsystemet er støtte for komprimering ved hjelp av LZO-RLE-algoritmen lagt til.
    • I dm-crypt er det lagt til er støtte for krypterte nøkler.
    • I Btrfs er behandling av leseoperasjoner i direkte I/O-modus forbedret. Ved montering er akselerert kontrollen av fjernunderavdelinger og kataloger som har mistet forelderen sin.
    • I CIFS er parameteren «nodelete» lagt til, som tillater vanlige rettighetskontroller på serveren, men forbyr klienten å slette filer eller kataloger.
    • I Ext4 er behandling av feil forbedret ENOSPC ved bruk av flertråding. I xattr er støtte for navnerom gnu.* lagt til, som brukes i GNU Hurd.
    • For Ext4 og XFS er støtte for DAX-operasjoner (direkte tilgang til FS uten å bruke blokkstørrelsen, og uten å bruke nivået til blokker) aktivert for spesifikke filer og kataloger.
    • I systemanropet statx() er en flagg STATX_ATTR_DAX, når det er angitt, blir informasjonen hentet ved hjelp av DAX-mekanismen.
    • I EXFAT er det lagt til er støtte for verifisering av oppstartsområdet.
    • I FAT er forbedret forhåndsinnlasting av FS-elementer. Testing av en treg 2TB USB-enhet viste en reduksjon i testens gjennomføringstid fra 383 til 51 sekunder.
  • Nettverks subsystem
    • I koden for administrasjon av nettverksbrytere er det lagt til støtte for protokollen MRP (Media Redundancy Protocol), som gir mulighet for feiltoleranse ved å koble flere Ethernet-brytere i ring.
    • I trafikkstyringssystemet (Tc) lagt til den nye handlingen «gate», som gir mulighet til å definere tidsintervaller for behandling og forkastelse av bestemte pakker.
    • I kjernen og verktøyet ethtool er det lagt til støtte for funksjoner som tester tilkoblede nettverkskabler og selvdiagnostisering av nettverksenheter.
    • I IPv6-stakken er det lagt til støtte for MPLS-algoritmen (Multiprotocol Label Switching) for ruting av pakker ved bruk av multidatakobling via etiketter (for IPv4 var MPLS allerede støttet).
    • Lagt til støtte for overføring av IKE-pakker (Internet Key Exchange) og IPSec over TCP (RFC 8229) for å omgå mulige blokkeringer av UDP.
    • Lagt til nettverksblokk enhet rnbd, som muliggjør ekstern tilgang til blokk enheten ved hjelp av RDMA-transportsystemet (InfiniBand, RoCE, iWARP) og RTRS-protokollen.
    • I TCP-stakken er det lagt til er det lagt til støtte for komprimering av område i svarene av selektiv bekreftelse (selective acknowledgment, SACK).
    • For IPv6 er implementert er det lagt til støtte for TCP-LD (RFC 6069, Long Connectivity Disruptions).
  • Utstyr
    • I DRM-driveren i915 for Intel-grafikkort er støtten for Intel Tiger Lake (GEN12) brikker aktivert som standard, for hvilke det også er er implementert mulighet for å bruke SAGV-systemet (System Agent Geyserville) for dynamisk tilpasning av frekvens og spenning i henhold til krav til energiforbruk eller ytelse.
    • I amdgpu-driveren er det lagt til støtte for pikselformatet FP16, og implementert muligheten for å jobbe med krypterte buffere i videominne (TMZ, Trusted Memory Zone).
    • Lagt til støtte for energiforbrukssensorer for AMD Zen og Zen2-prosessorer, samt temperaturfølere for AMD Ryzen 4000 Renoir. For AMD Zen og Zen2 er det lagt til støtte for uthenting av informasjon om energiforbruk gjennom grensesnittet RAPL (Running Average Power Limit).
    • I Nouveau-driveren er det lagt til støtte for formatmodifikatorer fra NVIDIA. For gv100 er muligheten for bruk av feltbilde-moduser lagt til. VGPU-definisjon er lagt til.
    • I MSM-driveren (Qualcomm) er støtte for GPU Adreno A405, A640 og A650 lagt til.
    • Inkludert intern rammeverk for ressursstyring av DRM (Direct Rendering Manager).
    • Lagt til støtte for smarttelefoner Xiaomi Redmi Note 7 og Samsung Galaxy S2, samt bærbare datamaskiner Elm/Hana Chromebook.
    • Lagt til drivere for LCD-paneler: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • Støtte for ARM-plattformer og 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.
    • Støtte for MIPS-prosessoren Loongson-2K (forkortet Loongson64) er lagt til. For CPU Loongson 3 er det lagt til støtte for virtualisering ved bruk av hypervisor KVM.
    • Lagt til
      støtte for den russiske prosessoren Baikal-T1 og systemet på brikke basert på den BE-T1000. Prosessoren Baikal-T1 inneholder to superskalære kjerner P5600 MIPS 32 r5, som arbeider på en frekvens på 1,2 GHz. Brikken inneholder L2-cache (1 MB), DDR3-1600 ECC-minnekontroller, 1 port 10Gb Ethernet, 2 porter 1Gb Ethernet, PCIe Gen.3 x4-kontroller, 2 SATA 3.0-porter, USB 2.0, GPIO, UART, SPI, I2C. Prosessoren gir maskinvarestøtte for virtualisering, SIMD-instruksjoner og integrert maskinvareakselerator for kryptografiske operasjoner, som støtter GOST 28147-89. Brikken er utviklet med bruk av lisensiert prosessorkjernenhet fra Imagination Technologies, MIPS32 P5600 Warrior.

Samtidig har Latinamerikansk Stiftelse for fri programvare dannet
variant helt fri kjerne 5.8 — Linux-libre 5.8-gnu, renset for elementer av fastvare og drivere som inneholder ikke-frie komponenter eller kodebiter hvis bruksområde er begrenset av produsenten. I den nye utgivelsen er lasting av blobber i drivere for 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, og I2C EEPROM Slave deaktivert. Koden for rensing av blobber i drivere og subsystemer for Adreno GPU, HabanaLabs Goya, x86 berøringsskjerm, vt6656 og btbcm er oppdatert.

Kilde: opennet.ru

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster