Etter to mÄneder med utvikling, presenterte Linus Torvalds utgivelsen av Linux-kjerne 6.2. Blant de mest bemerkelsesverdige endringene: mottak av kode under Copyleft-Next-lisensen er tillatt, forbedret implementering av RAID5/6 i Btrfs, videre integrering av stÞtte for Rust-sprÄket, reduserte kostnader ved beskyttelse mot Retbleed-angrep, mulighet for regulering av minneforbruk ved tilbakewriting, en mekanisme for TCP-balansering (Protective Load Balancing) er lagt til, lagt til en hybridmekanisme for beskyttelse av kommandostrÞmmen (FineIBT), i BPF har muligheten til Ä definere egne objekter og datatyper blitt introdusert, inkludert verktÞyet rv (Runtime Verification), redusert energiforbruk ved implementering av RCU-lÄser.
I den nye versjonen er 16843 feilrettinger fra 2178 utviklere inkludert, patch-stÞrrelsen er 62 MB (endringer berÞrte 14108 filer, 730195 linjer med kode ble lagt til, 409485 linjer ble fjernet). Omtrent 42 % av alle endringene i 6.2 er relatert til enhetsdrivere, omtrent 16 % av endringene er relatert til oppdatering av kode spesifikk for maskinvarearkitekturer, 12 % angÄr nettverksstakken, 4 % er relatert til filsystemer og 3 % til internkjernesystemer.
De viktigste nyhetene i kjerne 6.2:
- Minne og systemtjenester
- Det er tillatt Ä inkludere kode og endringer i kjernen som leveres under Copyleft-Next-lisensen 0.3.1. Copyleft-Next-lisensen er opprettet av en av forfatterne av GPLv3 og er fullt kompatibel med GPLv2, noe som er bekreftet av juridiske eksperter fra SUSE og Red Hat. Sammenlignet med GPLv2 er Copyleft-Next-lisensen betydelig mer kompakt og lettere Ä forstÄ (innledningen og referansen til utdaterte kompromisser er fjernet), den definerer tidsrammer og prosedyrer for Ä rette opp brudd, og fjerner automatisk copyleft-kravene for utdaterte verk som er over 15 Är gamle.
Copyleft-Next inneholder ogsÄ en bestemmelse om tildeling av rettigheter til patenterte teknologier, noe som, i motsetning til GPLv2, gjÞr denne lisensen kompatibel med Apache 2.0-lisensen. For Ä sikre full kompatibilitet med GPLv2 er det eksplisitt angitt i teksten til Copyleft-Next at avledede arbeider kan leveres ikke bare under den opprinnelige Copyleft-Next-lisensen, men ogsÄ under GPL-lisensen.
- Den inneholder verktÞyet «rv», som gir et grensesnitt for samhandling fra brukerrummet med hÄndterere av RV (Runtime Verification) subsystemet, som er designet for Ä sjekke korrekt drift av hÞyt pÄlitelige systemer som garanterer fravÊr av feil. Sjekken skjer under kjÞring ved Ä feste hÄndterere til sporingspunkter som sammenligner den faktiske kjÞringsforlÞpet med en forhÄndsdefinert referent deterministisk modell av en automat som definerer forventet systematferd.
- I zRAM-enheten, som tillater lagring av bytteomrÄde i minnet i komprimert form (en blokk enhet opprettes i minnet der swapping skjer med komprimering), er det implementert muligheten for Ä repacke sider med bruk av et alternativt algoritme for Ä oppnÄ hÞyere kompresjonsnivÄ. Hovedideen er Ä gi valget mellom flere algoritmer (lzo, lzo-rle, lz4, lz4hc, zstd), som tilbyr sine kompromisser mellom hastighet pÄ komprimering/utpakking og kompresjonsnivÄ, eller optimalt i spesielle situasjoner (for eksempel for komprimering av store minnesider).
- API-en «iommufd» er lagt til for Ă„ administrere input/output minnestyringssystemet â IOMMU (I/O Memory-Management Unit) fra brukerrummet. Den nye API gir mulighet til Ă„ administrere minneside-tabeller for input/output ved bruk av filbeskrivelser.
- I BPF er det nÄ mulig Ä opprette typer, definere egne objekter, bygge sitt eget objekthierarki og fleksibelt danne sine egne datatyper, som koblede lister. For BPF-programmer som gÄr inn i sÞvntilstand (BPF_F_SLEEPABLE), er stÞtten for bpf_rcu_read_{,un}lock()-lÄs lagt til. StÞtte for lagring av objekter task_struct er implementert. En karttype BPF_MAP_TYPE_CGRP_STORAGE er lagt til, som gir lokal lagring for cgroups.
- For RCU (Read-copy-update) lÄsemekanismen er det implementert en valgfri mekanisme for «late» callback-anrop, der flere callback-anrop blir behandlet i batchmodus etter en tidsur. Bruken av den foreslÄtte optimaliseringen kan redusere energiforbruket med 5-10% pÄ Android- og ChromeOS-enheter ved Ä utsette RCU-forespÞrselene under inaktivitet eller lav systembelastning.
- Lagt til sysctl split_lock_mitigate for Ä kontrollere systemresponsen ved oppdagelse av delte lÄser («split lock»), som oppstÄr nÄr det tilgangs til ukontrollerte data i minnet med et atomisk instruksjon der data krysser to CPU-cachelinjer. Slike lÄser fÞrer til betydelig reduksjon i ytelse. Med verdien 0 i split_lock_mitigate vises kun en advarsel om problemet, mens verdien 1 bÄde viser en advarsel og reduserer hastigheten pÄ prosessen som forÄrsaket lÄsen, for Ä bevare ytelsen til resten av systemet.
- For PowerPC-arkitekturen er det foreslÄtt en ny implementering av qspinlock-lÄser, som viser hÞyere ytelse og lÞser noen av de problemer med lÄser som oppstÄr i sjeldne tilfeller.
- Koden for behandling av MSI (Message-Signaled Interrupts) avbrudd er omarbeidet, i hvilken akkumulerte arkitekturproblemer er lÞst og stÞtte for binding av enkelte hÄndterere til forskjellige enheter er lagt til.
- For systemer basert pÄ LoongArch instruksjonssettarkitektur, brukt i Loongson 3 5000-prosessorer og implementert med en ny RISC ISA, som ligner pÄ MIPS og RISC-V, er stÞtte for ftrace, stakkbeskyttelse, dvale og ventemodi blitt implementert.
- Det er nÄ mulig Ä tildele navn til omrÄder av delt anonymt minne (tidligere kunne navn kun tildeles privat anonymt minne knyttet til en bestemt prosess).
- En ny kjerne-kommandolinjeparameter «trace_trigger» er lagt til, som er designet for Ä aktivere en sporingstrigger som brukes til Ä binde betingede kommandoer som utlÞses ved en sjekk (for eksempel trace_trigger=«sched_switch.stacktrace if prev_state == 2»).
- Kravene til versjonen av binutils er Þkt. For Ä bygge kjernen kreves nÄ minst binutils 2.25.
- Ved kall til exec() er det lagt til mulighet for Ă„ plassere prosessen i et tidsnavnrom (time namespace), hvor tiden er forskjellig fra systemtiden.
- OverfÞringen av tilleggskompetanse fra Rust-for-Linux-grenen har begynt, relatert til bruken av Rust som et sekundÊrt sprÄk for utvikling av drivere og kjernermoduler. Rust-stÞtte er inaktiv som standard og fÞrer ikke til at Rust inkluderes blant de obligatoriske byggavhengighetene for kjernen. Den grunnleggende funksjonaliteten som ble foreslÄtt i forrige utgivelse er nÄ utvidet med muligheter for stÞtte av lavnivÄkode, slik som typen Vec og makroene pr_debug!(), pr_cont!() og pr_alert!(), samt prosedyremakroen "#[vtable]", som forenkler arbeidet med tabeller for funksjonspekere. Tilsetning av hÞy-nivÄ Rust-bindy over kjernesubsystemene som vil tillate utvikling av fulle drivere i Rust er forventet i fremtidige utgivelser.
- Type "char" som brukes i kjernen er nÄ som standard erklÊrt som usignert for alle arkitekturer.
- Minnefordelingsmekanismen slab â SLOB (slab allocator) er erklĂŠrt utdĂždd, designet for systemer med lite minne. I stedet for SLOB anbefales det Ă„ bruke SLUB eller SLAB under vanlige forhold. For systemer med lite minne anbefales det Ă„ bruke SLUB i SLUB_TINY-modus.
- Det er tillatt Ä inkludere kode og endringer i kjernen som leveres under Copyleft-Next-lisensen 0.3.1. Copyleft-Next-lisensen er opprettet av en av forfatterne av GPLv3 og er fullt kompatibel med GPLv2, noe som er bekreftet av juridiske eksperter fra SUSE og Red Hat. Sammenlignet med GPLv2 er Copyleft-Next-lisensen betydelig mer kompakt og lettere Ä forstÄ (innledningen og referansen til utdaterte kompromisser er fjernet), den definerer tidsrammer og prosedyrer for Ä rette opp brudd, og fjerner automatisk copyleft-kravene for utdaterte verk som er over 15 Är gamle.
- Disk subsystem, I/O og filsystemer
- I Btrfs er det gjort forbedringer, rettet mot Ä fikse problemet «write hole» i RAID 5/6-implementasjonen (et forsÞk pÄ Ä gjenopprette RAID hvis et krasj skjer under skriving og det ikke er mulig Ä forstÄ hvilken blokk som ble skrevet korrekt pÄ hvilken av RAID-enhetene, noe som kan fÞre til Þdeleggelse av blokker som tilsvarer ufullstendige blokker). I tillegg aktiveres asynkron behandling av "discard"-operasjoner automatisk som standard for SSD, noe som gir hÞyere ytelse pÄ grunn av effektiv gruppering av "discard"-operasjoner i kÞen og behandling av kÞen av en bakgrunnsbehandler. Ytelsen til send- og lseek-operasjoner er ogsÄ forbedret, samt ioctl FIEMAP.
- Utvidede muligheter for Ä administrere utsatt skriving (writeback, bakgrunnslagring av endrede data) for blokkerte enheter. I visse situasjoner, for eksempel ved bruk av nettverksblokkerte enheter eller USB-minnepinner, kan utsatt skriving fÞre til hÞyt minneforbruk. For Ä hÄndtere oppfÞrselen til utsatt skriving og holde stÞrrelsen pÄ sidens cache innen bestemte rammer i sysfs (\/sys\/class\/bdi\/) er det foreslÄtt nye parametere strict_limit, min_bytes, max_bytes, min_ratio_fine og max_ratio_fine.
- I filsystemet F2FS er det implementert en ioctl-operasjon for atomisk erstatning, som gjÞr det mulig Ä skrive data til en fil innenfor en enkelt atomisk operasjon. F2FS har ogsÄ fÄtt en blokkeringscache for utvidelser, som hjelper med Ä identifisere aktivt brukte data eller data som ikke har vÊrt brukt pÄ lenge.
- I FS ext4 er det bare utfĂžrt feilrettinger.
- I filsystemet ntfs3 er det foreslÄtt flere nye monteringsalternativer: «nocase» for hÄndtering av store og smÄ bokstaver i filnavn og kataloger; windows_name for Ä forhindre oppretting av filnavn som inneholder tegn som er ugyldige for Windows OS; hide_dot_files for Ä hÄndtere tildelingen av skjulte filmerker for filer som begynner med punktum.
- I filsystemet Squashfs er det implementert en monteringsoppsjon «threads=», som gjÞr det mulig Ä bestemme antall trÄder for parallellisering av dekomprimeringsoperasjoner. I Squashfs har det ogsÄ blitt mulig Ä kartlegge brukeridentifikatorer for monterte filsystemer, brukt for Ä knytte filer fra en bestemt bruker pÄ et montert eksternt partisjon til en annen bruker i det nÄvÊrende systemet.
- Implementeringen av POSIX tilgangskontrollister (POSIX ACL) er omarbeidet. I den nye implementeringen er arkitekturproblemer lĂžst, vedlikehold av kodebasen er forenklet, og tryggere datatyper er brukt.
- I fscrypt-subsystemet, som benyttes for transparent kryptering av filer og kataloger, er det lagt til stĂžtte for krypteringsalgoritmen SM4 (kinesisk standard GB\/T 32907-2016).
- Muligheten for Ă„ bygge kjerner uten stĂžtte for NFSv2 er tilgjengelig (i fremtiden planlegges det Ă„ avvikle NFSv2-stĂžtte helt).
- Tilgangskontrollsystemet for NVMe-enheter er endret. Det er nÄ gitt mulighet for lesing og skriving til NVMe-enheten om skriverprosessen har tilgang til en spesifikk enhetsfil (tidligere mÄtte prosessen ha CAP_SYS_ADMIN-rettigheter).
- Pakke-driveren for CD/DVD som ble erklĂŠrt utdatert i 2016, er fjernet.
- Virtualisering og sikkerhet
- En ny metode for beskyttelse mot sÄrbarheten Retbleed i Intel og AMD CPU-er er implementert, som bruker sporingsdybde av anrop, noe som ikke bremser ytelsen like mye som den tidligere beskyttelsen mot Retbleed. for Ä aktivere den nye modusen er det foreslÄtt et kjernens kommandolinjeargument «retbleed=stuff».
- Det er lagt til en hybrid mekanisme for beskyttelse av kommandoeflyt FineIBT, som kombinerer bruken av Intels IBT (Indirect Branch Tracking) maskinvareinstruksjoner og programvarebeskyttelse kCFI (kernel Control Flow Integrity) for Ä blokkere brudd pÄ den normale rekkefÞlgen av utfÞrelse (control flow) som fÞlge av utnyttelser som endrer pekere i minnet. FineIBT tillater utfÞrelse via indirekte forgrening kun nÄr det er en overgang til instrukser ENDBR, som plasseres i begynnelsen av funksjonen. I tillegg, lignende til kCFI-mekanismen, vil det bli utfÞrt en hash-sjekk for Ä sikre at pekerne forblir uforandret.
- Det er lagt til begrensninger for Ä blokkere angrep som manipulerer genereringen av «oops»-tilstander, etter hvilke problematiske oppgaver avsluttes og tilstanden gjenopprettes uten Ä stoppe systemdriften. Ved et meget stort antall anrop til «oops»-tilstanden oppstÄr det en overflyt i referanseteller (refcount), som kan utnytte sÄrbarheter forÄrsaket av dereferering av NULL-pekerne. For Ä beskytte mot slike angrep, er det lagt til en grense i kjernen for maksimum antall «oops»-utlÞsninger, etter hvilken kjernen vil initiere en overgang til «panic»-tilstand med pÄfÞlgende omstart, noe som gjÞr det umulig Ä nÄ antall iterasjoner som er nÞdvendig for Ä overflyte refcount. Som standard er grensen satt til 10 000 «oops», men den kan endres via parameteren oops_limit.
- Konfigurasjonsparameteren LEGACY_TIOCSTI og sysctl legacy_tiocsti er lagt til for Ä deaktivere muligheten for Ä skrive data til terminalen ved hjelp av ioctl TIOCSTI, ettersom denne funksjonaliteten kan brukes til Ä sette inn vilkÄrlige symboler i terminalens inndata-buffer og simulere brukerinngang.
- En ny type interne strukturer, encoded_page, er foreslÄtt, der de lavere bitene av pekerens adresse brukes til Ä lagre tilleggsinformasjon som brukes for Ä beskytte mot utilsiktet dereferering av pekeren (ved reell behov for dereferering mÄ disse tilleggbitene fÞrst ryddes).
- PÄ ARM64-plattformen er det gitt mulighet for Ä aktivere og deaktivere den programvarebaserte implementeringen av Shadow Stack-mekanismen under oppstart, som brukes for Ä beskytte mot overskriving av returadressen fra funksjonen ved buffer-overflyt (beskyttelsens essens ligger i Ä lagre returadressen i en egen «skygge»-stack etter at kontrollen er overfÞrt til funksjonen, og hente denne adressen fÞr man gÄr ut av funksjonen). StÞtte for bÄde programvare- og maskinvareimplementering av Shadow Stack i én og samme kjerne gjÞr det mulig Ä bruke én kjerne pÄ forskjellige ARM-systemer, uavhengig av stÞtte for instruksjoner for pekerauthentisering. Aktivering av programvareimplementeringen skjer ved Ä erstatte nÞdvendige instruksjoner i koden under oppstart.
- StÞtte for bruk av den asynkrone utgangsvarslingen (asynchronous exit notification) pÄ Intel-prosessorer er lagt til, noe som gjÞr det mulig Ä oppdage single-step angrep pÄ kode som kjÞres i SGX-enklaver.
- Et sett med operasjoner er foreslÄtt for Ä la hypervisoren stÞtte forespÞrslene fra Intel TDX (Trusted Domain Extensions) gjeste-systemene.
- Kjernebyggeinnstillingene RANDOM_TRUST_BOOTLOADER og RANDOM_TRUST_CPU er fjernet, og de tilsvarende kommandolinjealternativene random.trust_bootloader og random.trust_cpu bĂžr brukes i stedet.
- Flagget LANDLOCK_ACCESS_FS_TRUNCATE, som gir mulighet for Ă„ kontrollere utfĂžrelsen av filtrimmeoperasjoner, er lagt til i Landlock-mekanismen, som begrenser samhandlingen til en gruppe prosesser med det ytre miljĂž.
- Nettverks subsystem
- StÞtte for PLB (Protective Load Balancing) er lagt til for IPv6, en mekanisme for lastbalansering mellom nettverkslenker, som har som mÄl Ä redusere overbelastningspunkter pÄ datasenterbrytere. Ved Ä endre IPv6 Flow Label, endrer PLB tilfeldigvis ruter for pakker for Ä jevne ut lasten pÄ bryterporter. For Ä redusere pakkerekkefÞlgen utfÞres denne operasjonen om mulig etter perioder med inaktivitet (idle). Bruken av PLB i Google-datasentre har redusert ubalansen i lasten pÄ bryterporter med gjennomsnittlig 60%, redusert pakketap med 33%, og senket forsinkelsene med 20%.
- En driver for MediaTek-enheter med stĂžtte for Wi-Fi 7 (802.11be) er lagt til.
- StĂžtte for 800-gbit-lenker er lagt til.
- Muligheten til Ă„ omdĂžpe nettverksgrensesnitt i sanntid, uten Ă„ stoppe driften, er lagt til.
- Loggmeldinger om SYN-flooding har fÄtt tillegg av IP-adressen pakken kom fra.
- For UDP er det mulig Ă„ bruke separate hash-tabeller for forskjellige nettverksnavnerom.
- StĂžtte for MAB (MAC Authentication Bypass) autentiseringsmetoden er implementert for nettverksbroer.
- StÞtte for sokkelmodus SO_MARK for Ä feste trafikksfilter basert pÄ fwmark, er implementert for CAN-protokollen (CAN_RAW).
- En ny parameter 'bitmask' er implementert i ipset, som tillater Ä angi en maske basert pÄ vilkÄrlige biter i IP-adressen (for eksempel 'ipset create set1 hash:ip bitmask 255.128.255.0').
- StÞtte for behandling av indre (inner) overskrifter som gÄr innen tunnellerte pakker er lagt til i nf_tables.
- Utstyr
- Et 'accel'-subsystem med implementering av en ramme for beregningsakseleratorer, som kan leveres bÄde som separate ASIC-er og som IP-blokker inne i SoC og GPU, er lagt til. Hovedsakelig er slike akseleratorer rettet mot Ä akselerere lÞsningen av oppgaver for maskinlÊring.
- Driveren amdgpu nÄ inkludert stÞtte for IP-komponentene GC, PSP, SMU og NBIO. For ARM64-systemer er det lagt til stÞtte for DCN (Display Core Next). Implementeringen av sikker skjermutgang er overfÞrt fra Ä bruke DCN10 til DCN21, og kan nÄ brukes ved tilkobling av flere skjermer.
- I driveren i915 (Intel) har stĂžtten for diskrete Intel Arc-grafikkort (DG2/Alchemist) vĂŠrt stabilisert.
- I driveren Nouveau er stÞtte for GPU NVIDIA GA102 (RTX 30) basert pÄ Ampere-arkitekturen implementert. For kort nva3 (GT215) er muligheten for Ä kontrollere bakgrunnsbelysning lagt til.
- StÞtte for trÄdlÞse adaptere basert pÄ Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) og MediaTek MT7996, Bluetooth-grensesnitt Broadcom BCM4377/4378/4387, samt Ethernet-kontrollerne Motorcomm yt8521, NVIDIA Tegra GE, er lagt til.
- StÞtte for ASoC (ALSA System on Chip) for innebygde lydbrikker HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588 er lagt til. StÞtte for lydgrensesnittet Focusrite Saffire Pro 40 er ogsÄ inkludert. Den lydkodek Realtek RT1318 er lagt til.
- StĂžtte for smarttelefoner og nettbrett fra Sony (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 er lagt til.
- StĂžtte for ARM SoC og Apple T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460), SM6375 (Snapdragon 695), SDM670 (Snapdragon 670), MSM8976 (Snapdragon 652), MSM8956 (Snapdragon 650), RK3326 Odroid-Go/rg351, Zyxel NSA310S, InnoComm i.MX8MM, Odroid Go Ultra er lagt til.
Samtidig har den latinamerikanske Free Software Foundation utviklet en helt fri versjon av kjerne 6.2 â Linux-libre 6.2-gnu, renset for elementer fra firmwares og drivere som inneholder ikke-frie komponenter eller deler av kode hvis bruksomrĂ„de er begrenset av produsenten. I denne utgivelsen har det vĂŠrt rensing av nye blobber i nouveau-driveren. Lasting av blobber i mt7622, mt7996 wifi og bcm4377 bluetooth-drivere er deaktivert. Rensing av blobber i dts-filer for Aarch64-arkitektur er utfĂžrt. Koden for rensing av blobber i ulike drivere og subsystemer er oppdatert. Rensingen av driveren s5k4ecgx er stoppet, da den er fjernet fra kjernen.
Kilde: opennet.ru
