Linux 6.2 kernel udgivelse

Efter to måneders udvikling præsenterede Linus Torvalds udgivelsen af ​​Linux-kernen 6.2. Blandt de mest bemærkelsesværdige ændringer: accept af kode under Copyleft-Next-licensen er tilladt, implementeringen af ​​RAID5/6 i Btrfs er forbedret, integrationen af ​​understøttelse af Rust-sproget fortsætter, overheaden til beskyttelse mod Rebleed-angreb reduceres, mulighed for at regulere hukommelsesforbrug under tilbageskrivning tilføjes, en mekanisme er tilføjet til TCP-balancering PLB (Protective Load Balancing), en hybrid kommandostrømsbeskyttelsesmekanisme (FineIBT) er tilføjet, BPF har nu mulighed for at definere sine egne objekter og datastrukturer , rv-værktøjet (Runtime Verification) er inkluderet, strømforbruget i implementeringen af ​​RCU-låse er blevet reduceret.

Den nye version indeholder 16843 rettelser fra 2178 udviklere, patchstørrelsen er 62 MB (ændringerne berørte 14108 filer, 730195 linjer kode blev tilføjet, 409485 linjer blev slettet). Omkring 42 % af alle ændringer, der er introduceret i 6.2, er relateret til enhedsdrivere, ca. 16 % af ændringerne er relateret til opdatering af kode, der er specifik for hardwarearkitekturer, 12 % er relateret til netværksstakken, 4 % er relateret til filsystemer og 3 % er relateret til interne kerneundersystemer.

Vigtigste innovationer i kerne 6.2:

  • Hukommelse og systemtjenester
    • Det er tilladt at inkludere i kernekoden og ændringer leveret under Copyleft-Next 0.3.1-licensen. Copyleft-Next-licensen blev oprettet af en af ​​forfatterne til GPLv3 og er fuldt ud kompatibel med GPLv2-licensen, som bekræftet af advokater fra SUSE og Red Hat. Sammenlignet med GPLv2 er Copyleft-Next-licensen meget mere kompakt og lettere at forstå (den indledende del og omtalen af ​​forældede kompromiser er blevet fjernet), definerer tidsrammen og proceduren for at eliminere overtrædelser og fjerner automatisk copyleft-krav for forældet software, der er mere end 15 år gammel.

      Copyleft-Next indeholder også en proprietær teknologibevillingsklausul, som i modsætning til GPLv2 gør denne licens kompatibel med Apache 2.0-licensen. For at sikre fuld kompatibilitet med GPLv2, angiver Copyleft-Next eksplicit, at et afledt værk kan leveres under GPL-licensen ud over den originale Copyleft-Next-licens.

    • Strukturen inkluderer "rv"-værktøjet, som giver en grænseflade til interaktion fra brugerplads med handlere af RV (Runtime Verification)-undersystemet, designet til at kontrollere den korrekte drift på yderst pålidelige systemer, der garanterer fravær af fejl. Verifikation udføres under kørsel ved at knytte handlere til sporingspunkter, der kontrollerer den faktiske fremskridt i udførelsen i forhold til en forudbestemt reference deterministisk model af maskinen, der definerer systemets forventede adfærd.
    • zRAM-enheden, som gør det muligt at lagre swap-partitionen i hukommelsen i en komprimeret form (en blokenhed oprettes i hukommelsen, hvortil swap udføres med komprimering), implementerer evnen til at ompakke sider ved hjælp af en alternativ algoritme for at opnå et højere niveau af kompression. Hovedideen er at give et valg mellem flere algoritmer (lzo, lzo-rle, lz4, lz4hc, zstd), at tilbyde deres egne kompromiser mellem kompressions-/dekompressionshastighed og kompressionsniveau, eller optimalt i specielle situationer (for eksempel til at komprimere store hukommelsessider).
    • Tilføjet "iommufd" API til styring af I/O-hukommelsesstyringssystemet - IOMMU (I/O Memory-Management Unit) fra brugerplads. Den nye API gør det muligt at administrere I/O-hukommelsessidetabeller ved hjælp af filbeskrivelser.
    • BPF giver mulighed for at oprette typer, definere dine egne objekter, bygge dit eget hierarki af objekter og fleksibelt oprette dine egne datastrukturer, såsom linkede lister. For BPF-programmer, der går i dvaletilstand (BPF_F_SLEEPABLE), er understøttelse af bpf_rcu_read_{,un}lock()-låse blevet tilføjet. Implementeret support til at gemme task_struct-objekter. Tilføjet korttype BPF_MAP_TYPE_CGRP_STORAGE, der giver lokal lagring til cgroups.
    • For RCU-blokeringsmekanismen (Read-copy-update) implementeres en valgfri mekanisme med "dovne" tilbagekaldsopkald, hvor flere tilbagekaldsopkald behandles på én gang ved hjælp af en timer i batch-tilstand. Anvendelse af den foreslåede optimering giver os mulighed for at reducere strømforbruget på Android- og ChromeOS-enheder med 5-10 % ved at udsætte RCU-anmodninger under inaktive tider eller lav belastning på systemet.
    • Tilføjet sysctl split_lock_mitigate for at kontrollere, hvordan systemet reagerer, når det detekterer split-låse, der opstår, når man får adgang til ikke-justerede data i hukommelsen på grund af, at data krydser to CPU-cache-linjer, når en atominstruktion udføres. Sådanne blokeringer fører til et betydeligt fald i ydeevnen. Indstilling af split_lock_mitigate til 0 giver kun en advarsel om, at der er et problem, mens indstilling af split_lock_mitigate til 1 også forårsager, at processen, der forårsagede, at låsen blev bremset for at bevare ydeevnen for resten af ​​systemet.
    • En ny implementering af qspinlock er blevet foreslået til PowerPC-arkitekturen, som demonstrerer højere ydeevne og løser nogle låseproblemer, der opstår i ekstraordinære tilfælde.
    • MSI (Message-Signaled Interrupts) afbrydelseshåndteringskoden er blevet omarbejdet, hvilket eliminerer akkumulerede arkitektoniske problemer og tilføjer understøttelse til at binde individuelle handlere til forskellige enheder.
    • For systemer baseret på LoongArch-instruktionssæt-arkitekturen, der anvendes i Loongson 3 5000-processorerne og implementerer den nye RISC ISA, svarende til MIPS og RISC-V, er understøttelse af ftrace, stackbeskyttelse, dvale- og standby-tilstande implementeret.
    • Muligheden for at tildele navne til områder af delt anonym hukommelse er blevet tilvejebragt (tidligere kunne navne kun tildeles til privat anonym hukommelse tildelt en specifik proces).
    • Tilføjet en ny kerne-kommandolinjeparameter "trace_trigger", designet til at aktivere en sporingsudløser, der bruges til at binde betingede kommandoer, der kaldes, når et kontroltjek udløses (f.eks. trace_trigger=”sched_switch.stacktrace if prev_state == 2″).
    • Kravene til versionen af ​​binutils-pakken er blevet øget. Opbygning af kernen kræver nu mindst binutils 2.25.
    • Når exec() kaldes, er muligheden for at placere en proces i et tidsnavneområde, hvor tiden adskiller sig fra systemtiden, blevet tilføjet.
    • Vi er begyndt at overføre yderligere funktionalitet fra Rust-for-Linux-grenen relateret til brugen af ​​Rust-sproget som et andet sprog til udvikling af drivere og kernemoduler. Rust-understøttelse er deaktiveret som standard og resulterer ikke i, at Rust inkluderes som en påkrævet kernebygningsafhængighed. Den grundlæggende funktionalitet, der tilbydes i den sidste udgivelse, er udvidet til at understøtte kode på lavt niveau, såsom Vec-typen og makroerne pr_debug!(), pr_cont!() og pr_alert!(), samt den proceduremæssige makro "#[vtable" ]”, hvilket forenkler arbejdet med pointertabeller på funktioner. Tilføjelsen af ​​Rust-bindinger på højt niveau over kerneundersystemer, som vil tillade oprettelsen af ​​fuldgyldige drivere i Rust, forventes i fremtidige udgivelser.
    • "char"-typen brugt i kernen er nu erklæret usigneret som standard for alle arkitekturer.
    • Mekanismen for tildeling af pladerhukommelse - SLOB (pladeallokator), som er designet til systemer med en lille mængde hukommelse, er blevet erklæret for forældet. I stedet for SLOB anbefales det under normale forhold at bruge SLUB eller SLAB. For systemer med en lille mængde hukommelse, anbefales det at bruge SLUB i tilstanden SLUB_TINY.
  • Diskundersystem, I/O og filsystemer
    • Der er foretaget forbedringer af Btrf'er, der sigter mod at løse "skrivehul"-problemet i RAID 5/6-implementeringer (et forsøg på at gendanne en RAID, hvis der opstår et nedbrud under skrivning, og det er umuligt at forstå, hvilken blok på hvilken RAID-enhed der blev skrevet korrekt, hvilket kan føre til blokering, svarende til underskrevne blokke). Derudover aktiverer SSD'er nu automatisk asynkron kasseringsdrift som standard, når det er muligt, hvilket giver mulighed for forbedret ydeevne på grund af effektiv gruppering af kasseringsoperationer i køer og behandling af køen af ​​en baggrundsprocessor. Forbedret ydeevne af send- og lseek-operationerne samt FIEMAP ioctl.
    • Mulighederne for at håndtere udskudt skrivning (tilbageskrivning, baggrundslagring af ændrede data) for blokenheder er blevet udvidet. I nogle situationer, såsom når du bruger netværksblokenheder eller USB-drev, kan dovne skrivninger resultere i stort RAM-forbrug. For at kontrollere adfærden af ​​dovne skrivninger og holde sidecachestørrelsen inden for visse grænser, er nye parametre strict_limit, min_bytes, max_bytes, min_ratio_fine og max_ratio_fine blevet introduceret i sysfs (/sys/class/bdi/).
    • F2FS filsystemet implementerer en atomic replace ioctl operation, som giver dig mulighed for at skrive data til en fil inden for en enkelt atomic operation. F2FS tilføjer også en blokudstrækningscache for at hjælpe med at identificere aktivt brugte data eller data, der ikke er blevet tilgået i lang tid.
    • I ext4 FS noteres kun fejlrettelser.
    • ntfs3-filsystemet tilbyder flere nye monteringsmuligheder: "nocase" til at kontrollere følsomhed mellem store og små bogstaver i fil- og mappenavne; windows_name for at forbyde oprettelse af filnavne, der indeholder tegn, der ikke er gyldige for Windows; hide_dot_files for at kontrollere tildelingen af ​​den skjulte filetikett for filer, der starter med en prik.
    • Squashfs-filsystemet implementerer en "threads="-monteringsmulighed, som giver dig mulighed for at definere antallet af tråde for at parallelisere dekompressionsoperationer. Squashfs introducerede også muligheden for at kortlægge bruger-id'er for monterede filsystemer, der bruges til at matche filerne fra en specifik bruger på en monteret fremmed partition med en anden bruger på det aktuelle system.
    • Implementeringen af ​​POSIX-adgangskontrollister (POSIX ACL'er) er blevet omarbejdet. Den nye implementering eliminerer arkitektoniske problemer, forenkler vedligeholdelse af kodebase og introducerer mere sikre datatyper.
    • fscrypt-undersystemet, som bruges til gennemsigtig kryptering af filer og mapper, har tilføjet understøttelse af SM4-krypteringsalgoritmen (kinesisk standard GB/T 32907-2016).
    • Muligheden for at bygge kernen uden NFSv2-understøttelse er givet (i fremtiden planlægger de helt at stoppe med at understøtte NFSv2).
    • Organiseringen af ​​kontrol af adgangsrettigheder til NVMe-enheder er blevet ændret. Giver mulighed for at læse og skrive til en NVMe-enhed, hvis skriveprocessen har adgang til enhedens dedikerede fil (tidligere skulle processen have CAP_SYS_ADMIN-tilladelsen).
    • Fjernede CD/DVD-pakkedriveren, som blev forældet i 2016.
  • Virtualisering og sikkerhed
    • En ny metode til beskyttelse mod Retbleed-sårbarheden er blevet implementeret i Intel og AMD CPU'er, ved hjælp af opkaldsdybdesporing, som ikke bremser arbejdet så meget som den tidligere nuværende beskyttelse mod Retbleed. For at aktivere den nye tilstand er kernekommandolinjeparameteren "retbleed=stuff" blevet foreslået.
    • Tilføjet en hybrid FineIBT-instruktionsflowbeskyttelsesmekanisme, der kombinerer brugen af ​​Intel IBT (Indirect Branch Tracking) hardwareinstruktioner og kCFI (kernel Control Flow Integrity) softwarebeskyttelse for at blokere kontrolflowovertrædelser som følge af brugen af ​​udnyttelser, der ændrer pointere gemt i hukommelsen på funktioner. FineIBT tillader kun udførelse ved indirekte hop i tilfælde af et hop til ENDBR-instruktionen, som er placeret helt i begyndelsen af ​​funktionen. Derudover, analogt med kCFI-mekanismen, kontrolleres hashes derefter for at garantere uforanderligheden af ​​pointere.
    • Tilføjet restriktioner for at blokere angreb, der manipulerer genereringen af ​​"ups"-tilstande, hvorefter problematiske opgaver afsluttes, og tilstanden gendannes uden at stoppe systemet. Med et meget stort antal opkald til "ups"-tilstanden opstår der et referencetælleroverløb (refcount), som tillader udnyttelse af sårbarheder forårsaget af NULL-pointer-dereferencer. For at beskytte mod sådanne angreb er der tilføjet en grænse til kernen for det maksimale antal "ups"-triggere, hvorefter kernen overskrider en overgang til "panik"-tilstanden efterfulgt af en genstart, hvilket ikke vil tillade opnåelse af antal iterationer, der kræves for at overløbe gentællingen. Som standard er grænsen sat til 10 tusinde "ups", men hvis det ønskes, kan den ændres gennem parameteren oops_limit.
    • Tilføjet konfigurationsparameter LEGACY_TIOCSTI og sysctl legacy_tiocsti for at deaktivere muligheden for at sætte data ind i terminalen ved hjælp af ioctl TIOCSTI, da denne funktionalitet kan bruges til at erstatte vilkårlige tegn i terminalens inputbuffer og simulere brugerinput.
    • En ny type intern struktur, encoded_page, foreslås, hvor de nederste bits af markøren bruges til at gemme yderligere information, der bruges til at beskytte mod utilsigtet dereference af markøren (hvis dereference faktisk er nødvendigt, skal disse ekstra bits ryddes først) .
    • På ARM64-platformen er det i opstartsfasen muligt at aktivere eller deaktivere softwareimplementeringen af ​​Shadow Stack-mekanismen, som bruges til at beskytte mod overskrivning af returadressen fra en funktion i tilfælde af et bufferoverløb på stakken ( essensen af ​​beskyttelsen er at gemme returadressen i en separat "skygge"-stabel, efter at kontrollen er overført til funktionen og hente den givne adresse, før funktionen forlades). Understøttelse af hardware- og softwareimplementeringer af Shadow Stack i én kernesamling giver dig mulighed for at bruge én kerne på forskellige ARM-systemer, uanset deres understøttelse af instruktioner til pointer-godkendelse. Inkluderingen af ​​en softwareimplementering udføres ved at erstatte de nødvendige instruktioner i koden under indlæsning.
    • Tilføjet understøttelse for at bruge den asynkrone afslutningsmeddelelsesmekanisme på Intel-processorer, som gør det muligt at detektere enkelttrinsangreb på kode udført i SGX-enklaver.
    • Der foreslås et sæt operationer, der gør det muligt for hypervisoren at understøtte anmodninger fra Intel TDX (Trusted Domain Extensions) gæstesystemer.
    • Kernebygningsindstillingerne RANDOM_TRUST_BOOTLOADER og RANDOM_TRUST_CPU er blevet fjernet til fordel for de tilsvarende kommandolinjeindstillinger random.trust_bootloader og random.trust_cpu.
    • Landlock-mekanismen, som giver dig mulighed for at begrænse interaktionen af ​​en gruppe af processer med det eksterne miljø, har tilføjet understøttelse af flaget LANDLOCK_ACCESS_FS_TRUNCATE, som gør det muligt at kontrollere udførelsen af ​​filafkortningsoperationer.
  • Netværks undersystem
    • Til IPv6 er der tilføjet understøttelse af PLB (Protective Load Balancing), en belastningsbalanceringsmekanisme mellem netværkslinks, der har til formål at reducere overbelastningspunkter på datacenterswitches. Ved at ændre IPv6 Flow Label ændrer PLB tilfældigt pakkestier for at balancere belastningen på switch-porte. For at reducere pakkeombestilling udføres denne operation efter perioder med inaktiv, når det er muligt. Brugen af ​​PLB i Googles datacentre har reduceret belastningsubalancen på switch-porte med i gennemsnit 60 %, reduceret pakketab med 33 % og reduceret latens med 20 %.
    • Tilføjet driver til MediaTek-enheder, der understøtter Wi-Fi 7 (802.11be).
    • Tilføjet understøttelse af 800-gigabit links.
    • Tilføjet muligheden for at omdøbe netværksgrænseflader på farten uden at stoppe arbejdet.
    • En omtale af den IP-adresse, som pakken ankom til, er blevet tilføjet til logmeddelelserne om SYN flood.
    • For UDP er muligheden for at bruge separate hashtabeller til forskellige netværksnavneområder blevet implementeret.
    • For netværksbroer er understøttelse af MAB-godkendelsesmetoden (MAC Authentication Bypass) blevet implementeret.
    • For CAN-protokollen (CAN_RAW) er understøttelse af SO_MARK-socket-tilstanden blevet implementeret til at tilslutte fwmark-baserede trafikfiltre.
    • ipset implementerer en ny bitmask-parameter, der giver dig mulighed for at indstille en maske baseret på vilkårlige bits i IP-adressen (for eksempel "ipset create set1 hash:ip bitmask 255.128.255.0").
    • Tilføjet understøttelse til behandling af interne overskrifter inde i tunnelerede pakker til nf_tables.
  • Оборудование
    • "Accel"-undersystemet er blevet tilføjet med implementeringen af ​​en ramme for beregningsacceleratorer, som kan leveres enten i form af individuelle ASIC'er eller i form af IP-blokke inde i SoC'en og GPU'en. Disse acceleratorer er hovedsageligt rettet mod at accelerere løsningen af ​​maskinlæringsproblemer.
    • Amdgpu-driveren inkluderer understøttelse af GC-, PSP-, SMU- og NBIO IP-komponenterne. For ARM64-systemer er understøttelse af DCN (Display Core Next) implementeret. Implementeringen af ​​beskyttet skærmoutput er blevet flyttet fra at bruge DCN10 til DCN21 og kan nu bruges ved tilslutning af flere skærme.
    • i915 (Intel) driveren har stabiliseret understøttelse af diskrete Intel Arc (DG2/Alchemist) videokort.
    • Nouveau-driveren understøtter NVIDIA GA102 (RTX 30) GPU'er baseret på Ampere-arkitekturen. For nva3 (GT215) kort er muligheden for at styre baggrundsbelysningen tilføjet.
    • Tilføjet understøttelse af trådløse adaptere baseret på Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) og MediaTek MT7996-chips, Broadcom BCM4377/4378/4387 Bluetooth-grænseflader, samt Motorcomm GE.
    • Tilføjet ASoC (ALSA System on Chip) understøttelse af indbyggede lydchips HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. Tilføjet understøttelse af lydgrænsefladen Focusrite Saffire Pro 40. Tilføjet Realtek RT1318 audio codec.
    • Tilføjet understøttelse af Sony smartphones og tablets (Xperia 10 IV, 5 IV, X og X compact, OnePlus One, 3, 3T og Nord N100, Xiaomi Poco F1 og Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1.
    • Tilføjet understøttelse af ARM SoC og Apple T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460), (Snapdragon 6375), 695 boards , SDM670 (Snapdragon 670), MSM8976 (Snapdragon 652), MSM8956 (Snapdragon 650), RK3326 Odroid-Go/rg351, Zyxel NSA310S, InnoComm i.MX8MM, Odroid Go Ultra.

Samtidig dannede Latin American Free Software Foundation en version af den helt gratis kerne 6.2 - Linux-libre 6.2-gnu, renset for elementer af firmware og drivere indeholdende proprietære komponenter eller kodesektioner, hvis omfang er begrænset af producenten. Den nye udgivelse rydder op i nye klatter i nouveau-driveren. Blob-indlæsning er deaktiveret i mt7622, ​​​​mt7996 wifi og bcm4377 bluetooth-drivere. Ryddede op i blob-navne i dts-filer til Aarch64-arkitekturen. Opdateret klatrensningskode i forskellige drivere og undersystemer. Stoppet med at rense s5k4ecgx-driveren, da den blev fjernet fra kernen.

Kilde: opennet.ru

Tilføj en kommentar