Linux-kjerneutgivelse 5.8

Etter to måneder med utvikling Linus Torvalds innsendt kjerneutgivelse Linux 5.8. Blant de mest bemerkelsesverdige endringene: en KCSAN rasetilstandsdetektor, en universell mekanisme for å levere varsler til brukerplassen, maskinvarestøtte for inline-kryptering, forbedrede sikkerhetsmekanismer for ARM64, støtte for den russiske Baikal-T1-prosessoren, muligheten til å montere procfs-forekomster separat , implementering av Shadow-sikkerhetsmekanismer for ARM64 Call Stack og BTI.

Kernel 5.8 ble den største når det gjelder antall endringer av alle kjerner under hele prosjektets eksistens. Endringene er dessuten ikke relatert til noe undersystem, men dekker ulike deler av kjernen og er hovedsakelig assosiert med intern omarbeiding og rengjøring. De største endringene ser man hos sjåfører. Den nye versjonen inkluderte 17606 2081 rettelser fra 20 65 utviklere, som påvirket omtrent 16180 % av alle filene i kjernekodelageret. Patchstørrelsen er 1043240 MB (endringene berørte 489854 5.7 filer, 15033 39 37 linjer med kode ble lagt til, 5.8 16 linjer ble slettet). Til sammenligning hadde 11-grenen 3 4 rettelser og en patchstørrelse på XNUMX MB. Omtrent XNUMX % av alle endringer introdusert i XNUMX er relatert til enhetsdrivere, omtrent XNUMX % av endringene er relatert til oppdatering av kode spesifikk for maskinvarearkitekturer, XNUMX % er relatert til nettverksstakken, XNUMX % er relatert til filsystemer og XNUMX % er relatert til interne kjerneundersystemer.

Den viktigste innovasjoner:

  • Virtualisering og sikkerhet
    • Lasting av kjernemoduler som har seksjoner med kode der bitene som tillater utførelse og skriving er satt samtidig. Endringen ble implementert som en del av et større prosjekt for å kvitte kjernen fra bruken av minnesider som tillater samtidig utførelse og skriving.
    • Det er nå mulig å lage separate procfs-forekomster, som tillater bruk av flere procfs-monteringspunkter, montert med forskjellige alternativer, men som gjenspeiler det samme prosessidentifikatornavneområdet (pid-navneområdet). Tidligere speilet alle procfs-monteringspunkter kun én intern representasjon, og enhver endring i monteringsparameterne påvirket alle andre monteringspunkter knyttet til samme prosess-ID-navneområde. Blant områdene hvor montering med forskjellige alternativer kan være etterspurt er implementering av lettvektsisolasjon for innebygde systemer med muligheten til å skjule visse typer prosesser og informasjonsnoder i procfs.
    • Støtte for mekanismen er implementert for ARM64-plattformen
      Shadow-Call Stack, levert av Clang-kompilatoren for å beskytte mot overskriving av returadressen til en funksjon i tilfelle stabelbufferoverflyt. Essensen av beskyttelsen er å lagre returadressen i en egen "skygge"-stabel etter å ha overført kontroll til en funksjon og hentet denne adressen før du går ut av funksjonen.

    • Instruksjonsstøtte er lagt til for ARM64-plattformen ARMv8.5-BTI (Branch Target Indicator) for å beskytte utførelsen av sett med instruksjoner som ikke skal forgrenes til. Blokkering av overganger til vilkårlige seksjoner av kode er implementert for å forhindre oppretting av gadgets i utnyttelser som bruker returorienterte programmeringsteknikker (ROP - Return-Oriented Programming; angriperen prøver ikke å plassere koden sin i minnet, men opererer på allerede eksisterende stykker av maskininstruksjoner som slutter med en returkontrollinstruksjon, hvorfra en kjede av anrop bygges for å oppnå ønsket funksjonalitet).
    • Lagt til maskinvarestøtte for innebygd kryptering av blokkenheter (Inline kryptering). Inlinep-krypteringsenheter er vanligvis innebygd i stasjonen, men er logisk plassert mellom systemminnet og disken, og krypterer og dekrypterer transparent I/O basert på kjernespesifiserte nøkler og en krypteringsalgoritme.
    • Lagt til "initrdmem"-kjernens kommandolinjealternativ for å tillate deg å spesifisere den fysiske minneadressen til initrd når du plasserer det første oppstartsbildet i RAM.
    • Lagt til ny funksjon: CAP_PERFMON for å få tilgang til perf-delsystemet og utføre ytelsesovervåking. CAP_BPF, som tillater visse BPF-operasjoner (som lasting av BPF-programmer) som tidligere krevde CAP_SYS_ADMIN-rettigheter (CAP_SYS_ADMIN-rettigheter er nå delt inn i en kombinasjon av CAP_BPF, CAP_PERFMON og CAP_NET_ADMIN).
    • Lagt en ny virtio-mem-enhet som lar deg hot-plugge og hot-plugge minne til gjestesystemer.
    • Implementert tilbakekalling av kartoperasjoner i /dev/mem hvis enhetsdriveren bruker overlappende minneområder.
    • Lagt til sårbarhetsbeskyttelse CROSSTalk/SRBDS, som lar deg gjenopprette resultatene av visse instruksjoner utført på en annen CPU-kjerne.
  • Minne- og systemtjenester
    • I dokumentet som definerer reglene for formatering av koden, akseptert anbefalinger for bruk av inkluderende terminologi. Utviklere anbefales ikke å bruke kombinasjonene 'master / slave' og 'blacklist / whitelist', samt ordet 'slave' separat. Anbefalingene gjelder kun ny bruk av disse vilkårene. Omtaler av de spesifiserte ordene som allerede eksisterer i kjernen vil forbli urørt. I ny kode er bruk av de merkede begrepene tillatt dersom det er nødvendig for å støtte API og ABI som er eksponert i brukerområdet, samt ved oppdatering av koden for å støtte eksisterende maskinvare eller protokoller hvis spesifikasjoner krever bruk av visse vilkår.
    • Feilsøkingsverktøy inkludert KCSAN (Kernel Concurrency Sanitizer), designet for dynamisk deteksjon løpsforholdene inne i kjernen. Bruken av KCSAN støttes når man bygger inn GCC og Clang, og krever spesielle modifikasjoner ved kompilering for å spore minnetilgang (det brukes bruddpunkter som utløses når minne leses eller endres). Fokus for KCSANs utvikling var på falsk positiv forebygging, skalerbarhet og brukervennlighet.
    • La til universell mekanisme levere varsler fra kjernen til brukerområdet. Mekanismen er basert på standard pipe-driver og lar deg effektivt distribuere varsler fra kjernen over kanaler som er åpne i brukerområdet. Varslingsmottakspunkter er rør som åpnes i en spesiell modus og lar meldinger mottatt fra kjernen samles i en ringbuffer. Lesing utføres av den vanlige read() funksjonen. Kanaleieren bestemmer hvilke kilder i kjernen som må overvåkes og kan definere et filter for å ignorere visse typer meldinger og hendelser. Av hendelsene er det for øyeblikket kun operasjoner med nøkler som støttes, for eksempel å legge til/fjerne nøkler og endre attributtene deres. Disse hendelsene er planlagt brukt i GNOME.
    • Fortsatt utvikling av 'pidfd'-funksjonalitet for å hjelpe til med å håndtere PID-gjenbrukssituasjoner (pidfd er assosiert med en spesifikk prosess og endres ikke, mens en PID kan assosieres med en annen prosess etter at den nåværende prosessen knyttet til den PID-en avsluttes). Den nye versjonen legger til støtte for bruk av pidfd for å knytte en prosess til navneområder (slik at pidfd kan spesifiseres ved utføring av setns systemkall). Ved å bruke pidfd kan du kontrollere tilknytningen av en prosess til flere typer navnerom med ett anrop, redusere antallet nødvendige systemanrop betydelig og implementere vedlegg i atommodus (hvis tilknytning til et av navnerommene mislykkes, vil de andre ikke koble til) .
    • Lagt til et nytt systemkall faccessat2(), forskjellig fra
      faccessat() et ekstra argument med flagg som samsvarer med POSIX-anbefalinger (tidligere ble disse flaggene emulert i C-biblioteket, og den nye faccessat2 lar dem implementeres i kjernen).

    • I Cgroup la til en memory.swap.high-innstilling som kan brukes til å bremse oppgaver som tar for mye bytteplass.
    • Til det asynkrone I/O-grensesnittet io_uring lagt til støtte for tee() systemkall.
    • Lagt til mekanisme "BPF iterator, designet for å sende ut innholdet i kjernestrukturer til brukerområdet.
    • sørget for muligheten til å bruke en ringbuffer for datautveksling mellom BPF-programmer.
    • Inn i mekanismen padata, designet for å organisere parallell utførelse av oppgaver i kjernen, la til støtte for flertrådede oppgaver med lastbalansering.
    • I pstore-mekanismen, som lar deg lagre feilsøkingsinformasjon om årsaken til krasj i minneområder som ikke går tapt mellom omstart, la til backend for å lagre informasjon for å blokkere enheter.
    • Fra PREEMPT_RT-kjernegrenen flyttet implementering av lokale låser.
    • La til nytt bufferallokerings-API (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 kjernekomponenter ved bruk av KGDB implementert.
    • Før utgivelse 4.8 er kravene til versjonen av GCC som kan brukes til å bygge kjernen økt. I en av de neste utgivelsene er det planlagt å heve standarden til GCC 4.9.
  • Diskundersystem, I/O og filsystemer
    • I Device Mapper la til ny dm-ebs (emuler blokkstørrelse) behandler, som kan brukes til å emulere en mindre logisk blokkstørrelse (for eksempel for å emulere 512-byte sektorer på 4K sektorstørrelse disker).
    • F2FS-filsystemet støtter nå komprimering ved hjelp av LZO-RLE-algoritmen.
    • I dm-krypt la til støtte for krypterte nøkler.
    • Btrfs har forbedret håndtering av leseoperasjoner i direkte I/O-modus. Ved montering akselerert sjekke slettede underseksjoner og kataloger uten en forelder.
    • En "nodelete"-parameter er lagt til CIFS, som tillater normale tillatelseskontroller på serveren, men forbyr klienten å slette filer eller kataloger.
    • Ext4 har forbedret feilhåndtering ENOSPC når du bruker multithreading. xattr har lagt til støtte for navneområdet gnu.* som brukes i GNU Hurd.
    • For Ext4 og XFS er støtte for DAX-operasjoner aktivert (direkte tilgang til filsystemet, omgåelse av sidebufferen uten å bruke blokkenhetsnivået) i forhold til individuelle filer og kataloger.
    • I systemanrop statx() flagg lagt til STATX_ATTR_DAX, som når det er spesifisert, henter informasjon ved hjelp av DAX-motoren.
    • EXFAT la til støtte for verifisering av oppstartsområde.
    • I FAT forbedret proaktiv lasting av FS-elementer. Testing av en treg 2TB USB-stasjon viste en reduksjon i testgjennomføringstid fra 383 til 51 sekunder.
  • Nettverksundersystem
    • I koden for å kontrollere driften av nettverksbroer la til protokollstøtte MRP (Media Redundancy Protocol), som tillater feiltoleranse ved å koble flere Ethernet-svitsjer.
    • Til trafikkkontrollsystem (Tc) la til ny "gate"-handling, som gjør det mulig å definere tidsintervaller for behandling og forkasting av visse pakker.
    • Støtte for testing av den tilkoblede nettverkskabelen og selvdiagnose av nettverksenheter er lagt til kjernen og ethtool-verktøyet.
    • Støtte for MPLS (Multiprotocol Label Switching)-algoritmen er lagt til IPv6-stakken for ruting av pakker ved bruk av multiprotokolletikettswitching (MPLS ble tidligere støttet for IPv4).
    • Lagt til støtte for overføring av IKE (Internet Key Exchange) og IPSec-pakker over TCP (RFC 8229) for å omgå mulig UDP-blokkering.
    • Lagt nettverksblokkenhet rnbd, som lar deg organisere ekstern tilgang til en blokkenhet ved hjelp av RDMA-transport (InfiniBand, RoCE, iWARP) og RTRS-protokollen.
    • I TCP-stakken la til støtte for rekkeviddekomprimering i selektiv bekreftelse (SACK)-svar.
    • For IPv6 implementert TCP-LD støtte (RFC 6069, Lange tilkoblingsforstyrrelser).
  • Оборудование
    • i915 DRM-driveren for Intel-skjermkort inkluderer støtte for Intel Tiger Lake (GEN12)-brikker som standard, for hvilke implementert muligheten til å bruke SAGV-systemet (System Agent Geyserville) til å dynamisk justere frekvens og spenning avhengig av strømforbruk eller ytelseskrav.
    • Amdgpu-driveren har lagt til støtte for FP16-pikselformatet og muligheten til å jobbe med krypterte buffere i videominnet (TMZ, Trusted Memory Zone).
    • Lagt til støtte for strømsensorer for AMD Zen- og Zen2-prosessorer, samt temperatursensorer for AMD Ryzen 4000 Renoir. Støtte for å hente informasjon om strømforbruk gjennom grensesnittet er gitt for AMD Zen og Zen2 RAPL (Gjennomsnittlig kraftgrense).
    • Lagt til støtte for NVIDIA-modifikatorformatet til Nouveau-driveren. For gv100 er muligheten til å bruke interlaced skannemoduser implementert. Lagt til vGPU-definisjon.
    • Lagt til støtte for Adreno A405, A640 og A650 GPUer til MSM (Qualcomm)-driveren.
    • La til internt rammeverk for å administrere DRM-ressurser (Direct Rendering Manager).
    • Lagt til støtte for Xiaomi Redmi Note 7 og Samsung Galaxy S2 smarttelefoner, samt Elm/Hana Chromebook bærbare datamaskiner.
    • Lagte til drivere for LCD-paneler: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • Lagt til støtte for ARM-kort og plattformer Renesas "RZ/G1H", Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-LIME-e, Check Point
      , Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI.

    • Lagt til støtte for MIPS-prosessor Loongson-2K (forkortet Loongson64). For CPU Loongson 3 er støtte for virtualisering ved bruk av KVM-hypervisor lagt til.
    • La til
      støtte for den russiske Baikal-T1-prosessoren og system-på-brikken basert på den BE-T1000. Baikal-T1-prosessoren inneholder to P5600 MIPS 32 r5 superskalarkjerner som opererer på 1.2 GHz. Brikken inneholder L2-cache (1 MB), DDR3-1600 ECC-minnekontroller, 1 10Gb Ethernet-port, 2 1Gb Ethernet-porter, 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 en integrert kryptografisk maskinvareakselerator som støtter GOST 28147-89. Brikken er utviklet med en MIPS32 P5600 Warrior-prosessor kjerneenhet lisensiert fra Imagination Technologies.

Samtidig la Latin American Free Software Foundation dannet
вариант helt gratis kjerne 5.8 - Linux-fri 5.8-gnu, fjernet for fastvare- og driverelementer som inneholder ikke-frie komponenter eller kodeseksjoner, hvis omfang er begrenset av produsenten. Den nye utgivelsen deaktiverer blob-lasting 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 ZL38060 Audio Connected Aimplifier, Microsemi Connected Home Process. og I2C EEPROM Slave. Oppdatert blob-rensekode i Adreno GPU, HabanaLabs Goya, x86 touchscreen, vt6656 og btbcm drivere og undersystemer.

Kilde: opennet.ru

Legg til en kommentar