Efter to måneders udvikling præsenterede Linus Torvalds udgivelsen af Linux-kernen 6.9. Blandt de mest bemærkelsesværdige ændringer er: modulet dm-vdo til deduplikation og komprimering af blok-enheder, direkte adgang til filer i FUSE, support til oprettelse af pidfd for individuelle tråde, BPF-token-mekanisme, støtte til Rust på ARM64-systemer, klassificeringen af Ext2-filsystemet som forældet, fjernelse af den gamle NTFS-driver samt støtte for Intel FRED-mekanismen.
Den nye version inkluderer 15680 rettelser fra 2106 udviklere, patchstørrelsen er 54 MB (ændringerne involverede 11825 filer, 687954 nye linjer kode er tilføjet, og 225344 linjer er fjernet). I den forrige udgivelse var der 15641 rettelser fra 2018 udviklere, og patchstørrelsen var 44 MB. Omkring 42% af alle ændringerne i 6.9 er relateret til enhedsdrivere, cirka 17% vedrører opdatering af hardware-specifik kode, 13% er relateret til netværksstakken, 7% til filsystemer, og 4% til interne kernenunderliggende systemer.
De vigtigste nyheder i kernen 6.9:
- DiskSubsystem, input/output og filsystemer
- I Device Mapper (DM) er der tilføjet en ny behandler, dm-vdo (virtual data optimizer), som gør det muligt at implementere et virtuelt blok-enhed baseret på eksisterende blok-enheder, der tilbyder funktioner som deduplikation af gentagne data, datakomprimering, udelukkelse af tomme blokke og udvidelse af blok-enhedsstørrelsen efter behov (thin provisioning). Disse funktioner implementeres på blok-enhedsniveauet og er uafhængige af det anvendte filsystem (for eksempel kan dm-vdo bruges til automatisk samling af duplikerede data og opbevaring af information i komprimeret form for alle filsystemer). Anvendelse af dm-vdo understøttes for fysiske lagersteder op til 256 TB, og der kan oprettes logiske volumener på op til 4 PB. For partitioneringsstyring anbefales det at bruge lvm. VDO-teknologien blev udviklet af Permabit og blev offentliggjort efter overtagelsen af Red Hat i 2017.
- I FUSE-systemet, der anvendes til implementering af filsystemer i brugerrummet, er en indledende implementering af 'passthrough'-tilstand tilføjet, som gør det muligt at hente fildata direkte på kernens niveau, uden at gå gennem en proces, der kører i brugerrummet. Dette kan i visse situationer væsentligt forbedre ydeevnen. For eksempel kan FUSE-implementeringer af FС, der kører i skrivebeskyttet tilstand og begrænser adgangen til filer, levere indholdet af filer fra det oprindelige FС uden at transmittere dem til FUSE-processen.
- Driveren til filsystemet Ext2 er blevet klassificeret som forældet (deprecated). Årsagen nævnes som understøttelse af kun 32-bit tidsstænger i inode, som vil løbe over den 19. januar 2038. I stedet for Ext2-driveren anbefales det at bruge Ext4-driveren, som understøtter operation med Ext2-filsystemet og er helt kompatibel med det, men kan også bruge tidsstempler, der ikke er påvirket af 2038-problemet, hvis FС er oprettet med inoder, der er større end 255 bytes (i Ext2-driveren blev 32-bit tidsstænger brugt uafhængigt af inode størrelse).
- Den gamle NTFS-filsystemdriver er blevet fjernet, og siden version 5.15 er den nye NTFS3-driver introduceret. Det er anset for ikke hensigtsmæssigt at have to NTFS-drevere leveret i kernen, givet at den gamle driver ikke er blevet opdateret i mange år, er i en elendig tilstand og kun kan køre i læsetilstand.
- Der er tilføjet støtte til mapping af brugerkonti på de monterede filsystemer i zonefs og hugetlbfs, hvilket anvendes til at associere filer, der tilhører en bestemt bruger på et monteret eksternt partition, med en anden bruger i det nuværende system.
- I NFSv4 er administratorer givet mulighed for at rydde op i åbningsretter og fillåse.
- For Ext4-filsystemet er der kun tale om fejlretning og opdatering af kunit-tests.
- I Btrfs fortsættes overgangen af funktioner til brug af page folios.
- I filsystemet XFS er der fortsat arbejdet på implementeringen af muligheden for at anvende værktøjet fsck til at kontrollere og rette op på identificerede problemer i online-tilstand, uden at det er nødvendigt at afmontere filsystemet.
- Der er tilføjet en flag RWF_NOAPPEND til systemopkaldet pwritev2(), hvilket gør det muligt at angive en offset for skrivning, selvom filen er åbnet i tillægstilstand til at tilføje data til slutningen af filen.
- Nye ioctl-kommandoer er tilføjet: FS_IOC_GETUUID — returnerer UUID-identifieren for det angivne filsystem, og FS_IOC_GETFSSYSFSPATH — angiver placeringen i /sys/fs for det angivne monterede FS.
- Filsystemerne efs, qnx4 og coda er opdateret til at bruge det nye API til montering af partitioner.
- Implementeringen af filoperationer, der udføres uden hensyn til store/små bogstaver, er forbedret. Ydeevnen er øget ved først at udføre sammenligning med hensyn til store/små bogstaver og derefter falde tilbage til søgning uden hensyn til store/små bogstaver. Problemer ved montering af overlayfs oven på mapper med indstillet mode uden hensyn til store/små bogstaver er blevet løst.
- Hukommelse og systemtjenester
- Understøttelse af Intel FRED (Flexible Return and Event Delivery) mekanismen er blevet implementeret for at forbedre effektiviteten og pålideligheden af leveringen af oplysninger om lavniveau hændelser sammenlignet med den nuværende IDT (Interrupt Descriptor Table) mekanisme. Ydeevnen forbedres, og forsinkelser reduceres takket være tilbagelevering af hændelser via processorens IRET-instruktion i stedet for at overføre hændelser gennem IDT-tabellen. Pålideligheden forbedres ved, at håndteringen af hændelsesindtræden adskilles i kernel- og brugerkonteksterne, hvilket sikrer beskyttelse mod indlejret NMI-udførelse og opbevaring af alle CPU-registere relateret til undtagelser i et udvidet stakramme.
- Muligheden for at optimere adgangen til data fra individuelle CPU-kerner er blevet tilføjet ved at bruge navngivne adresseområder (Named Address Spaces) i kernens kode, som implementeret i GCC som en udvidelse af GNU C.
- Flaget PIDFD_THREAD er blevet tilføjet til funktionen pidfd_open(), hvilket muliggør oprettelse af pidfd for individuelle tråde i stedet for kun at bruge pidfd i konteksten af gruppetrådslederen. Derudover er der foreslået en pseudofilsystem til adgang til pidfd gennem det virtuelle filsystem. I modsætning til procesidentifikation ved hjælp af pid, er pidfd-identifieren knyttet til en specifik proces og ændres ikke, mens PID efter den nuværende proces kan være knyttet til en anden proces.
- BPF-subsystemet har fået tilføjet en mekanisme for BPF-tokens, som gør det muligt at delegere adgangsrettigheder til privilegerede BPF-operationer selektivt til programmer; f.eks. kan man give en ikke-privilegeret applikation adgang til specifikke BPF-subsystemer uden at give fulde CAP_BPF-rettigheder.
- I subsystemet BPF er der tilføjet en ny type delt hukommelse, bpf_arena, som definerer et område til deling mellem BPF-programmer og processer i brugerrummet. Der er tilføjet instruktionen may_goto, der muliggør oprettelse af cyklusser, der kan afbrydes af verificatoren. Muligheden for at generere vilkårlige TCP SYN-cookies fra BPF-programmer og oprettelsen af BPF-håndterere til bekæmpelse af SYN-flood er også blevet tilføjet.
- Overførslen af ændringer fra Rust-for-Linux-grenen fortsætter, vedrørende brugen af Rust som det andet sprog til udvikling af drivere og kerne-moduler (Rust understøttelse er ikke aktiveret som standard og medfører ikke, at Rust bliver en obligatorisk byggedependens for kernen). Der er tilføjet support for brug af Rust på 64-bit ARM-processorer. Overgangen til Rust-version 1.76 er gennemført. Der er tilføjet makroen ‘container_of!’. Den ustabile funktionalitet ‘ptr_metadata’ er blevet erstattet med den stabile metode ‘byte_sub’. Et modul ‘time’ med funktionen ‘msecs_to_jiffies()’ er blevet tilføjet.
- Der er tilføjet muligheden for at afkorte filer (ftruncate_file) i io_uring subsystemet.
- Der er tilføjet en ny type arbejdsqueue WQ_BH (workqueue Bottom Halves) til asynkron udførelse af kode i konteksten af softwareafbrydelser, beregnet til at erstatte de forældede tasklet'er.
- Subsystemet til timerarbejde er blevet betydeligt omarbejdet, hvor logikken til valg af det aktive CPU-kerne til udførelse af den udløste timer er forbedret for at undgå at vække inaktive kerner fra dvalen.
- Muligheden for at opdatere energi forbrugsmodellen for kernen (EM, Energy Model) under drift er blevet implementeret, hvilket kan bruges til at tage højde for påvirkningen af driftstemperaturen på CPU'ens energisk effektivitet. Ydeevnen for funktionen em_cpu_energy() er blevet markant forbedret, hvilket nu kører 1,43 gange hurtigere i tests på et stationært system, og på RockPi 4B-kortet hele 1,69 gange hurtigere.
- Der er tilføjet support til at starte systemer baseret på ARM64-arkitekturen i LPA2-tilstand med et 52-bit virtuelt adresseområde.
- For ARM64-systemer er support til kontinuerlige PTE (Page Table Entry) optegnelser blevet implementeret, hvilket muliggør forbedret ydeevne gennem bedre udnyttelse af TLB (Translation Lookaside Buffer).
- Der er anvendt patches til at forbedre ydeevnen for hukommelsesstyringssystemet ved at reducere forekomsten af konkurrenceblokeringer i vmalloc().
- For LoongArch-arkitekturen er der implementeret en mekanisme til varm patching af kernen, der muliggør anvendelse af rettelser på kernen uden genstart.
- For RISC-V systemer er der implementeret understøttelse af systemopkaldet membarrier(), der sikrer installation af hukommelsesbarrierer for de tråde, der kører i systemet.
- Kravene til versionen af LLVM/Clang, der kan bruges til at bygge kernen, er blevet hævet. Nu kræves det mindst udgivelsen LLVM 13.0.1 (tidligere var det muligt at bygge med LLVM 11+).
- I mekanismen "User trace events", som muliggør oprettelse af sporingsbegivenheder fra brugerprocesser for at overvåge aktivitet i brugerrummet, er der tilføjet understøttelse af eksport af begivenhedsoplysninger i forskellige formater (USER_EVENT_REG_MULTI_FORMAT).
- I funktionen for funktionsopkaldstracking er der tilføjet muligheden for at spore tilstanden af indgående funktionsargumenter ved sporing af funktionsudgangen. Værdierne fra returneringsoperatoren kan nu matches med de argumenter, der blev brugt ved funktionsopkaldet.
- I perf-værktøjet er der tilføjet understøttelse af aggregationsoutput-tilstand "cluster" ("perf stat -a —per-cluster") for at samle statistikker for delte ressourcer. Der er implementeret mulighed for at anvende libcapstone-biblioteket til disassemblering af processorinstruktioner ("perf script -F disasm"). Der er foretaget optimeringer af hukommelsesforbruget ved udførelse af kommandoerne perf report og perf annotate.
- Virtualisering og sikkerhed
- Beskyttelse mod RFDS (Register File Data Sampling) sårbarhed er blevet tilføjet i Intel Atom processorer, der muliggør udtræk af resterende oplysninger fra processorens registerfiler (RF, Register File), der bruges til at gemme indholdet af registre i alle opgaver på samme CPU-kerne. For at blokere sårbarheden kræves der en mikrocode-opdatering og brug af instruktionen VERW for at rense indholdet af mikroarkitekturbufferne, når der returneres fra kernen til brugerrummet. For at aktivere beskyttelse ved opstart af kernen kan flaget "reg_file_data_sampling=on" angives. Oplysninger om sårbarhedens omfang og tilgængeligheden af den nødvendige mikrocode til beskyttelse kan vurderes i filen "/sys/devices/system/cpu/vulnerabilities/reg_file_data_sampling".
- Der er tilføjet grundlæggende støtte til beskyttelse af gæstesystemer ved hjælp af AMD SEV-SNP (Secure Nested Paging)-udvidelsen, som sikrer sikker håndtering af indlejrede hukommelsesside-tabeller og beskytter mod "undeSErVed" og "SEVerity"-angreb på AMD EPYC-processorer, hvilket muliggør omgåelse af beskyttelsesmekanismen AMD SEV (Secure Encrypted Virtualization). I KVM de nødvendige ændringer til brug af SNP planlægges at blive tilføjet i version 6.10.
- Moduler med implementering af IMA (Integrity Measurement Architecture) og EVM (Extended Verification Module) er blevet overført til brug af LSM (Linux Security Modules)-rammen, hvilket i kraft af ingen tab af funktionalitet har gjort det muligt at forenkle koden betydeligt, samle duplikeret funktionalitet og udnytte de standardmuligheder, der tilbydes gennem LSM. IMA-modulet er beregnet til at kontrollere integriteten af komponenter i operativsystemet via digitale signaturer og hashes. EVM-modulet muliggør beskyttelse af udvidede filattributter (xattrs) mod angreb, der sigter mod at kompromittere deres integritet (EVM forhindrer offline-angreb, hvor en angriber kan ændre metadata, f.eks. ved at starte fra sit eget lager).
- Systemopkaldene lsm_list_modules(), lsm_get_self_attr() og lsm_set_self_attr() er blevet redesignede for bedre kompatibilitet med 32-bit miljøer, beregnet til at liste indlæste LSM-moduler (Linux Security Modules) og for at hente/sætte attributter for LSM-modulet. Ændringen bryder bagudkompatibiliteten, men da de nye systemopkald blev tilføjet i den seneste kerneudgave og endnu ikke er anvendt i applikationer, fandt Linus Torvalds, at ændringen var acceptabel.
- Der blev gjort et forsøg på at genoptage brugen af UBSAN (Undefined Behavior Sanitizer). Problemet ligger i, at compilere håndterer heltalsoverskridelser af både signeret og usigneret typer forskelligt. Signeret overskridelse og pointer overskridelser falder ind under kategorien af udefineret adfærd, mens usignerede overskridelser omkredses modulo 2n, hvilket bevarer kun de laveste bits af resultatet ("wrap-around") og falder ikke ind under udefineret adfærd. For at eliminere situationer med udefineret adfærd, kompilieres kernen med indstillingen "-fno-strict-overflow", som medfører brug af "wrap-around" til alle heltalsoverskridelser. GCC og Clang kan ikke korrekt diagnosticere nogle problemer, når flaget "-fno-strict-overflow" anvendes, og aktivering af UBSAN sigter mod at samarbejde med udviklerne af compileren for at eliminere falske alarmer og identificere heltalsoverskridelser, hvor der ikke er klare tjek.
For at tjekke mulige overskridelser i kernen anvendes konstruktioner som "var + offset PAGE_SHIFT) < pgoff){..}"), som er afhængige af kompilering med flaget "-fno-strict-overflow" og dækker ikke al den kode, hvor der potentielt kan opstå overskridelse. Problemet er, at ved brug af UBSAN har sådanne tjek givet et stort antal falske advarsler, og derfor blev UBSAN nødt til at blive deaktiveret i 2021. I den opdaterede implementering foreslås det at anvende specielle annotationer __signed_wrap og __unsigned_wrap, samt færdige makroer med tjek som add_would_overflow(a, b) og add_wrap(a, b), der adskiller de til det menes af udviklerne at bruge heltalsoverskridelser fra tilfældige overskridelser, som kan føre til sårbarheder. Forslaget om en mere omfattende omstrukturering af kernen med indførelsen af yderligere typedefinitioner blev afvist af Linus Torvalds.
- Netværkssubsystem
- I netværkssystemet er der udført arbejde for at reducere forekomsten af konkurrerende låsninger ("lock contention", forsøg på at få fat i en lås, der holdes af en anden tråd). Brug af RTNL-låse er blevet reduceret.
- Muligheden for at aktivere support for busy polling sockets i konteksten for individuelle epoll-kald er blevet tilføjet. Størrelsen på puljen og budgetparametre kan stilles separat fra systemets standardindstillinger.
- Strukturen net_hotdata er implementeret for at øge effektiviteten af cachelagring af de mest ofte anvendte netværkskonfigurationsvariabler.
- I MPTCP er der tilføjet støtte til at indstille TCP_NOTSENT_LOWAT-optionen for sockets, som gør det muligt at begrænse størrelsen af sendepuffer. MCTP-socket-API'en har fået støtte for netværks-id'er, der giver mulighed for at bruge flere ikke-overlappende MCTP-netværk på én vært.
- IPSec har fået tilføjet støtte til at omdirigere ICMP-beskeder med fejlmeddelelser (RFC 4301).
- Processen med at scanne ruter med udløbet levetid er blevet accelereret.
- XDP's ydeevne er blevet forbedret ved at undgå allokering af store hukommelsesblokke.
- Muligheden for at vedhæfte metadata til netconsole-beskeder er blevet tilføjet.
- I Netfilter er det tilladt at definere tabeller fra brugerrummet, som knyttes til en styrende baggrundsproces og ikke automatisk slettes, når brugerens applikation afsluttes.
- I nftables er tilføjelsen af elementer til sæt med sammenkoblede intervaller blevet accelereret.
- Udstyr
- I i915-driveren fortsætter arbejdet med at implementere support til Intel LunarLake (Xe 2) chips. Nye PCI-identifikatorer for enheder baseret på Intel Arrow Lake og Alder Lake N-chips er blevet tilføjet. For Displayport er der tilføjet støtte til tunneling (DP tunneling) og båndbreddeallokering. Fastboot-tilstand er aktiveret for alle platforme. Support til fejlkodning er blevet tilføjet, knyttet til specifikke enheder.
- I AMDGPU-driveren er der forberedt til implementering af support til AMD GPU RDNA3.5 og RDNA4. Support til ATHUB 4.1, LSDMA 7.0, JPEG DPG, IH 7.0, HDP 7.0, VCN 5.0, SMU 13.0.6, NBIO 7.11, SDMA 6.1, MMHUB 3.3, DCN 3.5.1, NBIF 6.3.1, VPE 6.1.1 og RAS ACA-rammen er blevet tilføjet. En ny parameter for freesync_video er tilføjet til kernemodulet for at aktivere eksperimentel støtte til optimering af skift mellem videoindstillinger ved brug af FreeSync-teknologi.
- I Nouveau-driveren er skærmstyringskoden blevet ændret til at bruge funktionen kmemdup().
- Arbejde med DRM-driveren (Direct Rendering Manager) Xe til GPU'er baseret på Intel Xe-arkitekturen, som anvendes i Intel Arc-grafikkort og integreret grafik, er fortsat fra Tiger Lake-processorerne.
- DRM-driveren til Mediatek MT8188 VDOSYS1-chips er blevet tilføjet.
- Indstillinger relateret til videoundersystemerne er flyttet til sektionen CONFIG_VIDEO.
- Understøttelse af ARM64 SoC'er: Mediatek MT7981B (Filogic 820), MT7988A (Filogic 880), NXP i.MX8DXP, Renesas R8A779G2 (R-Car V4H ES2.0), R8A779H0 (R-Car V4M), TI J722S, er blevet tilføjet.
- Understøttelse af ARM-platforme og enheder er tilføjet: Android-telefoner baseret på Tegra30-chips, Chromebook-modeller baseret på Mediatek MT8186, NAS, tablets og spillekonsoller baseret på Rockchip RK35xx, White Hawk-kort baseret på Renesas SoC, kort baseret på Qualcomm SM8550 (Snapdragon 8 Gen 2), Apalis Evalueringskort, Sielaff i.MX6 Solo Board, Samsung Galaxy Tab 4 10.1 LTE.
- Koden til ALSA-lydsystemet er blevet refaktoreret. Understøttelse af lydsystemer fra Microchip SAM9x7, NXP i.MX95 og Qualcomm WCD939x er blevet tilføjet. I SoundWire-driveren er ASoC-support med AMD ACP 6.3 audio co-processorer blevet implementeret, og for Intel-systemer er der realiseret en DSPless-tilstand. Understøttelse af yderligere lydkodeker Cirrus HD er blevet tilføjet. Virtio-driveren har fået forbedret styring af lydudstyr.
- Understøttelse af Ethernet-controllere Marvell Octeon PCI Endpoint NIC VF og Intel E825-C 100G er blevet tilføjet.
Samtidig har den latinamerikanske Free Software Foundation skabt en variant af den helt frie kernel 6.9 — Linux-libre 6.9-gnu, renset for firmware og drivere, som indeholder ikke-frie komponenter eller kodesegmenter, hvis anvendelse er begrænset af producenten. I version 6.9 er koden til rensning af blobs i drivere som amdgpu, ath12k, adreno, btusb og r8169 blevet opdateret. Der er foretaget rensning af den nye ptp_fc3-driver. Der er foretaget rensning af blobnavne i dts-filer (devicetree) til Aarch64-arkitekturen. Problemer med rensning af i915-driveren, der førte til hang-ups under initialisering, er blevet løst. Der er foretaget ændringer vedrørende behandling af blobs leveret i form af hexadecimal dumps.
Kilde: opennet.ru
