Efter to måneders udvikling præsenterede Linus Torvalds udgivelsen af Linux-kernen 6.2. Blandt de mest iøjnefaldende ændringer er: godkendelse af kode leveret under Copyleft-Next-licensen, forbedret implementering af RAID5/6 i Btrfs, fortsat integration af støtte til Rust-sproget, reducerede overheadomkostninger ved beskyttelse mod Retbleed-angreb, tilføjet mulighed for regulering af hukommelsesforbrug ved tilbageholdelse, implementering af en mekanisme til TCP-balance (Protective Load Balancing), tilføjet hybridmekanisme til beskyttelse af udførelsesstrømmen (FineIBT), mulighed for definition af egne objekter og datastrukturer i BPF, inkluderet værktøjet rv (Runtime Verification), reduceret energiforbrug i RCU-låseimplementeringer.
I den nye version er der accepteret 16843 rettelser fra 2178 udviklere, patchens størrelse er 62 MB (ændringerne berørte 14108 filer, tilføjet 730195 linjer kode, fjernet 409485 linjer). Cirka 42% af alle ændringerne i 6.2 er relateret til enhedsdrivere, omkring 16% af ændringerne vedrører opdatering af kode specifik for hardwarearkitekturer, 12% er relateret til netværksstakken, 4% til filsystemer, og 3% til interne underliggende systemer i kernen.
De vigtigste nyheder i kernen 6.2:
- Hukommelse og systemtjenester
- Det er nu tilladt at inkludere kode og ændringer leveret under Copyleft-Next 0.3.1 i kernen. Copyleft-Next-licensen er skabt af en af forfatterne til GPLv3 og er fuldt kompatibel med GPLv2, hvilket er bekræftet af advokater fra selskaberne SUSE og Red Hat. Sammenlignet med GPLv2 er Copyleft-Next-licensen væsentligt mere kompakt og lettere at forstå (intro og omtalen af forældede kompromiser er fjernet), den fastlægger frister og procedurer for afhjælpning af overtrædelser og ophæver automatisk copyleft-krav for værker, der er mere end 15 år gamle.
Copyleft-Next indeholder også en bestemmelse om at give rettigheder til patenterede teknologier, hvilket gør denne licens kompatibel med Apache 2.0 i modsætning til GPLv2. For at sikre fuld kompatibilitet med GPLv2 er det klart angivet i teksten af Copyleft-Next, at derivative værker kan leveres ikke kun under den oprindelige Copyleft-Next-licens, men også under GPL-licensen.
- Pakken inkluderer værktøjet «rv», der giver et interface til interaktion fra brugerrum med håndtererne i RV (Runtime Verification) subsystemet, der er designet til at kontrollere korrektheden af driften på høj-pålidelige systemer, der garanterer fraværet af fejltagelser. Kontrollen udføres under kørsel ved at vedhæfte håndtere til sporingspunkter, som sammenligner den faktiske udførelse med en foruddefineret model af en deterministisk automat, der bestemmer systemets forventede adfærd.
- I zRAM-enheden, som muliggør lagring af swap-partitionen i komprimeret format (der oprettes en blokenhed i hukommelsen, som swapper med komprimering), er der implementeret evnen til at repakere sider ved brug af et alternativt algoritme for at opnå en højere komprimeringsgrad. Den grundlæggende idé er at give et valg mellem flere algoritmer (lzo, lzo-rle, lz4, lz4hc, zstd), der tilbyder deres kompromiser mellem komprimerings-/dekomprimeringshastighed og komprimeringsniveau eller er optimale i specielle situationer (f.eks. for komprimering af store hukommelsessider).
- API’en «iommufd» er blevet tilføjet for at styre I/O hukommelsesstyringssystemet — IOMMU (I/O Memory-Management Unit) fra brugerrum. Det nye API giver mulighed for at administrere side tabeler for I/O hukommelse ved hjælp af filbeskrivelser.
- I BPF er det muligt at oprette typer, definere egne objekter, opbygge sin egen objekthierarki og fleksibelt danne sine egne datastrukturer, såsom sammenkædede lister. For BPF-programmer, der går i dvaletilstand (BPF_F_SLEEPABLE), er der tilføjet understøttelse af låse bpf_rcu_read_{,un}lock(). Understøttelse af gemmning af task_struct objekter er blevet implementeret. Tilføjet map-type BPF_MAP_TYPE_CGRP_STORAGE, der giver lokal opbevaring for cgroups.
- For RCU (Read-copy-update) låsemekanismen er der implementeret en valgfri mekanisme for "late" callback-kald, hvor flere callback-kald behandles i batch med en timer. Anvendelsen af den foreslåede optimering gør det muligt at reducere energiforbruget med 5-10% på Android- og ChromeOS-enheder ved at forsinke RCU-forespørgsler under stille perioder eller lav systembelastning.
- Sysctl split_lock_mitigate er tilføjet for at styre systemets reaktion, når der opdages split locks, der opstår ved adgang til misalignerede data i hukommelsen, idet de atomare operationer krydser to cache-linjer i CPU'en. Sådanne låse fører til betydeligt fald i ydeevnen. Når split_lock_mitigate er indstillet til 0, vises kun en advarsel om problemet, mens indstilling til 1 ikke blot viser en advarsel, men også bremser udførelsen af den proces, der forårsagede låsen, for at bevare resten af systemets ydeevne.
- Der er foreslået en ny implementering af qspinlock-låse til PowerPC-arkitekturen, som viser højere ydeevne og løser nogle problemer med låse, der opstår i undtagelsestilfælde.
- Koden til behandling af MSI (Message-Signaled Interrupts) er blevet revideret for at fjerne ophobede arkitekturelle problemer og tilføje støtte til at binde individuelle håndteringsfunktioner til forskellige enheder.
- For systemer baseret på instruction set architecture LoongArch, der anvendes i Loongson 3 5000-processorerne og implementerer en ny RISC ISA, der ligner MIPS og RISC-V, er der tilføjet støtte til ftrace, stakbeskyttelse og søvn- og ventetilstande.
- Muligheden for at tildele navne til områder af delt anonym hukommelse er blevet introduceret (tidligere kunne navne kun tildeles privat anonym hukommelse knyttet til en bestemt proces).
- En ny parameter til kernelens kommandolinje 'trace_trigger' er blevet tilføjet, designet til at aktivere en trace-trigger, der anvendes til at binde betingede kommandoer, der aktiveres ved betingelseskontrol (f.eks. trace_trigger='sched_switch.stacktrace if prev_state == 2').
- Kravene til versionen af binutils er blevet hævet. Det kræves nu mindst binutils 2.25 for at kompilere kernen.
- Ved kald af exec() er det blevet muligt at placere processen i et tidsrum (time namespace), hvor tiden adskiller sig fra systemtiden.
- Overførslen af ekstra funktionalitet fra Rust-for-Linux-grenen er startet, som relaterer til brugen af Rust som andetsprog til udvikling af drivere og kerne-moduler. Rust-understøttelse er som standard inaktiv og medfører ikke, at Rust bliver en obligatorisk byggeafhængighed til kernen. Den grundlæggende funktionalitet, der blev foreslået i den tidligere udgave, er udvidet med muligheder for understøttelse af lavniveau-kode, såsom typen Vec og makroerne pr_debug!(), pr_cont!() og pr_alert!(), samt den procedurale makro "#[vtable]", der forenkler arbejdet med funktionspeger-tabeller. Tilføjelsen af høj-niveau Rust-wrappere over kerne-subsystemerne, som vil muliggøre oprettelse af fuldt fungerende drivere på Rust, forventes i kommende udgivelser.
- Den brugte type "char" i kernen er nu som standard erklæret som usigneret for alle arkitekturer.
- Slagsystemet til hukommelsesfordeling, SLOB (slab allocator), som blev designet til systemer med begrænset hukommelse, er erklæret forældet. I normale tilfælde anbefales det at bruge SLUB eller SLAB i stedet for SLOB. For systemer med begrænset hukommelse anbefales det at anvende SLUB i SLUB_TINY-tilstand.
- Det er nu tilladt at inkludere kode og ændringer leveret under Copyleft-Next 0.3.1 i kernen. Copyleft-Next-licensen er skabt af en af forfatterne til GPLv3 og er fuldt kompatibel med GPLv2, hvilket er bekræftet af advokater fra selskaberne SUSE og Red Hat. Sammenlignet med GPLv2 er Copyleft-Next-licensen væsentligt mere kompakt og lettere at forstå (intro og omtalen af forældede kompromiser er fjernet), den fastlægger frister og procedurer for afhjælpning af overtrædelser og ophæver automatisk copyleft-krav for værker, der er mere end 15 år gamle.
- DiskSubsystem, input/output og filsystemer
- I Btrfs er der implementeret forbedringer rettet mod at løse "write hole"-problemet i RAID 5/6-implementeringen (forsøg på at genskabe RAID, hvis et nedbrud opstod under skrivning, og det er umuligt at forstå, hvilken blok der korrekt blev skrevet til hvilken af RAID-enhederne, hvilket kan føre til ødelæggelse af blokke, der svarer til de ikke-skrevede blokke). Derudover aktiveres asynkron behandling af "discard"-operationen som standard og automatisk for SSD'er, hvilket muliggør højere ydeevne på grund af effektiv gruppering af "discard"-operationer i køen og behandling af køen af en baggrundsprocessor. Ydeevnen for send- og lseek-operationer samt ioctl FIEMAP er blevet forbedret.
- Mulighederne for at administrere forsinket skrivning (writeback, baggrundsbeskyttelse af ændrede data) er blevet udvidet for blokenheder. I visse situationer, for eksempel ved brug af netværksblok-enheder eller USB-drev, kan forsinket skrivning føre til for stort forbrug af RAM. For at styre adfærden ved forsinket skrivning og holde størrelsen på sidestørrelsescache i bestemte rammer i sysfs (\/sys\/class\/bdi\/) er der introduceret nye parametre strict_limit, min_bytes, max_bytes, min_ratio_fine og max_ratio_fine.
- I filsystemet F2FS er der implementeret en ioctl-operation for atomisk udskiftning, som gør det muligt at skrive data til en fil som en enkelt atomisk operation. I F2FS er der også tilføjet en blokcache for extent, der hjælper med at bestemme aktivt anvendte data eller data, som ikke er blevet tilgået i lang tid.
- I filsystemet ext4 bemærkes der kun fejlrettelser.
- I filsystemet ntfs3 er der foreslået flere nye monteringsmuligheder: "nocase" til at styre store og små bogstaver i fil- og mappenavne; windows_name for at forhindre oprettelse af filnavne, der indeholder tegn, som er ugyldige for Windows; hide_dot_files til at styre tildelingen af skjulte filmarkører for filer, der starter med punktum.
- I filsystemet Squashfs er der implementeret en monteringsmulighed "threads=", som gør det muligt at angive antallet af tråde til parallelisering af udpakkingsoperationer. I Squashfs er der også blevet mulighed for mapping af bruger-id'er for monterede filsystemer, som anvendes til at matche filer af en bestemt bruger på et monteret fremmed partition med en anden bruger i det aktuelle system.
- Implementeringen af POSIX-adgangskontrolister (POSIX ACL) er blevet revideret. I den nye implementering er arkitektoniske problemer blevet løst, vedligeholdelsen af kodebasen er blevet forenklet, og mere sikre datatyper er blevet involveret.
- I fscrypt subsystemet, der bruges til transparent kryptering af filer og mapper, er der tilføjet støtte til krypteringsalgoritmen SM4 (kinesisk standard GB\/T 32907-2016).
- Muligheden for at bygge kernen uden støtte for NFSv2 er blevet givet (i fremtiden planlægges det at stoppe helt med at støtte NFSv2).
- Adgangsretterne til NVMe-enheder er blevet ændret. Muligheden for at læse og skrive til NVMe-enheden er nu tilgængelig, hvis skriveprocessen har adgang til en særlig enhedsfil (tidligere måtte processen have CAP_SYS_ADMIN-bevillingen).
- Den batchdriver til CD/DVD, der blev erklæret forældet i 2016, er blevet fjernet.
- Virtualisering og sikkerhed
- En ny metode til beskyttelse mod Retbleed-sårbarheden i Intel- og AMD-CPU'er er implementeret, som bruger opkaldsdybde tracking, hvilket ikke bremser systemet så meget som den tidligere Retbleed-beskyttelse. For at aktivere den nye tilstand er der foreslået et kommandolinjeparameter til kernen "retbleed=stuff".
- Der er tilføjet en hybridmekanisme til beskyttelse af udførelsestråde kaldet FineIBT, som kombinerer brugen af Intel IBT (Indirect Branch Tracking) hardwareinstruktioner og softwarebeskyttelse i form af kCFI (kernel Control Flow Integrity) for at blockere forstyrrelser i den normale udførelsesrækkefølge som følge af exploitering, der ændrer de i hukommelsen gemte funktionspekere. FineIBT tillader udførelse af indirekte spring kun ved spring til ENDBR-instruktionen, som placeres i begyndelsen af funktionen. Derudover, i lighed med kCFI-mekanismen, udføres der efterfølgende hashingkontroller, der sikrer, at pekere forbliver uændrede.
- Der er tilføjet begrænsninger til at blokere angreb, der manipulerer med genereringen af "oops"-tilstande, hvorefter problematiske opgaver afsluttes, og tilstanden gendannes, uden at systemet stoppes. Ved et meget stort antal oops-tilstande opstår der et overflow i referencetælleren (refcount), hvilket gør det muligt at udnytte sårbarheder, der skyldes dereferencering af NULL-pekere. For at beskytte mod sådanne angreb er der tilføjet en grænse til kernen for det maksimale antal oops-udløsninger, hvorefter kernen vil initiere en opstart i "panic"-tilstand med efterfølgende genstart, hvilket forhindrer at nå det nødvendige antal iterationer for at overflowe refcount. Som standard er grænsen sat til 10.000 oops, men den kan ændres via parameteren oops_limit.
- Der er tilføjet en konfigurationsparameter LEGACY_TIOCSTI og sysctl legacy_tiocsti for at deaktivere muligheden for at indsætte data i terminalen ved hjælp af ioctl TIOCSTI, da denne funktion kan bruges til at indsætte vilkårlige tegn i terminalens inputbuffer og simulere brugerinput.
- Der er foreslået en ny type interne strukturer encoded_page, hvor de laveste bits af adresserne bruges til at gemme ekstra oplysninger, der anvendes til at beskytte mod utilsigtet dereferering af pegepind (hvis der virkelig er behov for at dereferere, skal disse ekstra bits først nulstilles).
- På ARM64-platformen er der under opstart mulighed for at aktivere og deaktivere den softwarebaserede implementering af mekanismen Shadow Stack, der bruges til at beskytte mod overskrivning af returadressen fra en funktion i tilfælde af buffer overflow (ideen bag beskyttelsen er at gemme returadressen i en separat 'skygge' stack efter kontroloverførsel til funktionen og hente denne adresse før udgangen fra funktionen). Støtte til både hardware- og softwareimplementering af Shadow Stack i en enkelt kerneopbygning gør det muligt at bruge en kerne på forskellige ARM-systemer, uafhængigt af understøttelsen af instruktioner til pegepindvalidering. Den softwarebaserede implementering aktiveres ved at erstatte de nødvendige instruktioner i koden under opstart.
- Der er tilføjet støtte til brugen af asynkron exit-notifikation på Intel-processorer, som muliggør identificering af single-step angreb på kode, der køres i SGX-enklaver.
- Et sæt operationer er blevet foreslået for at tillade hypervisoren at understøtte forespørgsler fra gæstesystemer Intel TDX (Trusted Domain Extensions).
- Byggeindstillingerne for kernen RANDOM_TRUST_BOOTLOADER og RANDOM_TRUST_CPU er blevet fjernet, og de relevante kommandolinjeindstillinger random.trust_bootloader og random.trust_cpu bør i stedet anvendes.
- Der er tilføjet støtte til flaget LANDLOCK_ACCESS_FS_TRUNCATE i Landlock-mekanismen, der tillader at begrænse interaktionen mellem en gruppe processer og det ydre miljø, hvilket muliggør kontrol over udførelsen af filafskæringsoperationer.
- Netværkssubsystem
- For IPv6, support for PLB (Protective Load Balancing) has been added, a load balancing mechanism between network links aimed at reducing congestion points on data center switches. By modifying the IPv6 Flow Label, PLB randomly alters packet paths to balance the load on switch ports. To reduce packet reordering, this operation is performed after idle periods whenever possible. The application of PLB in Google data centers has resulted in an average reduction of load imbalance on switch ports by 60%, a 33% decrease in packet loss, and a 20% reduction in latency.
- A driver for MediaTek devices with Wi-Fi 7 (802.11be) support has been added.
- Support for 800-gigabit links has been introduced.
- The ability to rename network interfaces on the fly, without stopping operations, has been added.
- Log messages about SYN floods now include a mention of the IP address to which the packet was sent.
- For UDP, the ability to use separate hash tables for different network namespaces has been implemented.
- For network bridges, support for the MAB (MAC Authentication Bypass) authentication method has been introduced.
- For the CAN protocol (CAN_RAW), support for the SO_MARK socket mode for attaching traffic filters based on fwmark has been implemented.
- A new bitmask parameter has been implemented in ipset, allowing for a mask based on arbitrary bits in an IP address (for example, "ipset create set1 hash:ip bitmask 255.128.255.0").
- Support for processing inner headers within tunneled packets has been added to nf_tables.
- Udstyr
- An "accel" subsystem has been introduced, implementing a framework for accelerators that can be provided as either separate ASICs or IP blocks within SoC and GPU. Primarily, such accelerators are aimed at speeding up machine learning tasks.
- The amdgpu driver has added support for IP components GC, PSP, SMU, and NBIO. For ARM64 systems, support for DCN (Display Core Next) has been implemented. The implementation of secure screen output has been transitioned from DCN10 to DCN21 and can now be used with multiple screens connected.
- In the i915 (Intel) driver, support for discrete Intel Arc graphics cards (DG2/Alchemist) has been stabilized.
- In the Nouveau driver, support for the NVIDIA GA102 (RTX 30) GPU based on the Ampere architecture has been implemented. For nva3 (GT215) cards, the ability to control ambient backlighting has been added.
- Understøttelse af trådløse adaptorer baseret på Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) og MediaTek MT7996, Bluetooth-interfaces Broadcom BCM4377/4378/4387 samt Ethernet-controllere Motorcomm yt8521, NVIDIA Tegra GE er blevet tilføjet.
- Understøttelse af ASoC (ALSA System on Chip) til 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 er blevet tilføjet. Understøttelse af lydinterface Focusrite Saffire Pro 40 er blevet tilføjet. Lydkodek Realtek RT1318 er blevet tilføjet.
- Understøttelse af smartphones og tablets 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 blevet 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), 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 blevet tilføjet.
Samtidig har den latinamerikanske Fond for fri software udarbejdet en fuldstændig fri kerneversion 6.2 — Linux-libre 6.2-gnu, der er renset for firmware- og driverkomponenter, der indeholder ikke-frie komponenter eller kodeområder, hvis anvendelse er begrænset af producenten. I den nye udgave er der foretaget rengøring af nye blobs i nouveau-driveren. Indlæsning af blobs i mt7622-, mt7996 wifi- og bcm4377 bluetooth-drevne er blevet deaktiveret. Navnerengøring af blobs i dts-filer til Aarch64-arkitekturen er blevet udført. Koden til rengøring af blobs i forskellige drivere og subsystemer er blevet opdateret. Rengøringen af s5k4ecgx-driveren er blevet stoppet, da den er blevet fjernet fra kernen.
Kilde: opennet.ru
