Efter to måneders udvikling præsenterede Linus Torvalds udgivelsen af Linux-kernen 5.18. Blandt de mest iøjnefaldende ændringer: der er gennemført en stor oprydning af forældet funktionalitet, filsystemet Reiserfs er blevet erklæret forældet, der er implementeret begivenheder til sporing af brugerprocesser, support for mekanismen til blokering af Intel-exploitering (IBT) er blevet tilføjet, der er indført en tilstand til påvisning af bufferoverløb ved brug af memcpy() funktionen, der er tilføjet en mekanisme til sporing af funktionskald (fprobe), ydeevnen for CPU-scheduler på AMD Zen er blevet forbedret, der er inkluderet en driver til kontrol af CPU Intel-funktionalitet (SDS), og en del patches til restrukturering af header-filer er blevet integreret, ligesom anvendelsen af standarden C11 er blevet godkendt.
Den nye version omfatter 16.206 rettelser fra 2.127 udviklere (i den tidligere udgave var der 14.203 rettelser fra 1.995 udviklere), patch-størrelsen er 108 MB (ændringerne berørte 14.235 filer, 1.340.982 kodelinjer blev tilføjet, og 593.836 kodelinjer blev fjernet). Cirka 44% af alle ændringerne i 5.18 vedrører enheddrivere, cirka 16% af ændringerne handler om opdatering af hardware-specifik kode, 11% er relateret til netværksstakken, 3% til filsystemer og 3% til interne kerneundersystemer.
De vigtigste nyheder i kernen 5.18:
- DiskSubsystem, input/output og filsystemer
- I filsystemet Btrfs er der tilføjet support for transmission af komprimerede data ved udførelse af send- og receive-operationer. Tidligere, når der blev brugt send/receive, blev data sendt fra den sendende part udpakket, og den modtagende part komprimerede dem igen, før de blev skrevet. I kernen 5.18 får applikationer i brugerrummet, der bruger send/receive-kald, mulighed for at overføre komprimerede data uden repakning. Denne funktionalitet er muliggjort gennem de nye ioctl-operationer BTRFS_IOC_ENCODED_READ og BTRFS_IOC_ENCODED_WRITE, der gør det muligt direkte at læse og skrive information i extent.
Derudover er ydeevnen for fsync blevet forbedret i Btrfs. Der er tilføjet mulighed for deduplikerings- og reflink-operationer (kloning af filmetadata med oprettelse af link til allerede eksisterende data uden faktisk at kopiere dem) for hele lageret uden at være begrænset til monteringspunkter.
- I direkte input/output-tilstand (Direct I/O) er det muligt at få adgang til krypterede filer ved brug af fscrypt inline-kryptering, hvor krypterings- og dekrypteringsoperationer udføres af controlleren for lagringsenheden i stedet for kernen. Ved almindelig kryptering udført af kernen er adgangen til krypterede filer via Direct I/O fortsat umulig, da adgang til filerne foregår uden om kernelens bufferingsmekanisme.
- NFS-serveren har som standard aktiveret understøttelse af NFSv3-protokollen, som nu ikke kræver separat aktivering og er tilgængelig ved generel aktivering af NFS. NFSv3 betragtes som den primære og altid understøttede version af NFS, mens understøttelse af NFSv2 muligvis vil blive ophævet i fremtiden. Effektiviteten af læsning af indholdet i kataloger er betydeligt forbedret.
- ReiserFS-filsystemet er blevet erklæret forældet og forventes at blive fjernet i 2025. Afklaring af ReiserFS som forældet vil reducere den arbejdsbyrde, der er forbundet med vedligeholdelse af generelle ændringer, som inkluderer understøttelse af det nye API til montering, iomap og binders.
- For F2FS-filsystemet er der implementeret en mulighed for at mappe bruger-id'er fra monterede filsystemer, der anvendes til at matche filer fra en bestemt bruger på et monteret fremmed partition med en anden bruger i det aktuelle system.
- Koden til beregning af statistik i Device-mapper-handtere er blevet redesignet, hvilket har forbedret nøjagtigheden af regnskabet i håndtere som dm-crypt.
- For NVMe-enheder er der implementeret understøttelse af 64-bit kontrolsummer til integritetskontrol.
- For exfat-filsystemet er der introduceret en ny monteringsmulighed kaldet "keep_last_dots", der forhindrer sletning af prikker i slutningen af filnavnet (i Windows fjernes prikker i slutningen af navnet som standard).
- I EXT4 er ydeevnen af fast_commit-tilstand forbedret, og skalerbarheden er øget. Monteringsmuligheden "mb_optimize_scan", der forbedrer ydeevnen under høj fragmentering af filsystemet, er blevet tilpasset til at arbejde med filer med extent.
- Understøttelsen af skrive-streams i subsystemet, der understøtter blok-enheder, er ophørt. Denne mulighed blev foreslået for SSD'er, men opnåede ikke udbredelse, og der findes i øjeblikket ikke enheder, der understøtter denne tilstand, og det er usandsynligt, at de vil dukke op i fremtiden.
- I filsystemet Btrfs er der tilføjet support for transmission af komprimerede data ved udførelse af send- og receive-operationer. Tidligere, når der blev brugt send/receive, blev data sendt fra den sendende part udpakket, og den modtagende part komprimerede dem igen, før de blev skrevet. I kernen 5.18 får applikationer i brugerrummet, der bruger send/receive-kald, mulighed for at overføre komprimerede data uden repakning. Denne funktionalitet er muliggjort gennem de nye ioctl-operationer BTRFS_IOC_ENCODED_READ og BTRFS_IOC_ENCODED_WRITE, der gør det muligt direkte at læse og skrive information i extent.
- Hukommelse og systemtjenester
- Integration af et sæt patches er påbegyndt, hvilket gør det muligt at reducere tiden til genkompilering af kernen betydeligt ved at omstrukturere hierarkiet af headerfiler og reducere antallet af krydsafhængigheder. I kernen 5.18 er der inkluderet patches, der optimerer strukturen af headerfilerne for scheduler (kernel/sched). Sammenlignet med den tidligere udgave er CPU-tidsforbruget ved kompilering af koden kernel/sched reduceret med 61%, mens den faktiske tid er reduceret med 3,9% (fra 2,95 til 2,84 sekunder).
- Brugen af C11-standarden, der blev offentliggjort i 2011, er blevet tilladt i kernelkoden. Tidligere skulle den kode, der blev tilføjet til kernen, overholde ANSI C-specifikationen (C89), der blev etableret tilbage i 1989. I build-scripts for kernel 5.18 er indstillingen ‘—std=gnu89’ blevet erstattet med ‘—std=gnu11 -Wno-shift-negative-value’. Muligheden for at bruge C17-standarden blev overvejet, men i så fald skulle den minimum understøttede version af GCC hæves, men inkluderingen af støtte til C11 falder ind under de nuværende krav til GCC-versionen (5.1).
- Ydelsen af opgaveplanlægning på AMD-processorer med Zen-mikroarkitektur er blevet forbedret, hvor der for hver node med lokale hukommelseskanaler er givet flere cache-lag (LLC, Last Level Cache). I den nye version er ubalancen i LLC mellem NUMA-noderne blevet fjernet, hvilket har medført en betydelig stigning i ydelsen under visse belastninger.
- Værktøjerne til at trace applikationer i brugerrummet er blevet udvidet. I den nye kernelversion er det blevet muligt for brugernes processer at skabe trace-events (User events) og optage data i trace-bufferet, som kan ses gennem standard værktøjer til kernel-tracing såsom ftrace og perf. Trace-events fra brugerrummet er adskilt fra trace-events i kernen. Tilstanden af events kan ses gennem filen /sys/kernel/debug/tracing/user_events_status, mens registreringen af en event og optagelse af data sker gennem filen /sys/kernel/debug/tracing/user_events_data.
- Der er tilføjet en overvågningsmekanisme (probe) til funktion kald — fprobe. API'en for fprobe er baseret på ftrace, men er kun begrænset til muligheden for at vedhæfte callback-håndterere til funktionsindgange og funktionsafslutning. I modsætning til kprobes og kretprobes, giver den nye mekanisme mulighed for at bruge en håndterer til flere funktioner på én gang.
- Støtten til ældre ARM-processorer (ARMv4 og ARMv5), der ikke har en hukommelsesstyringsenhed (MMU), er ophørt. Støtten til ARMv7-M-systemer uden MMU er bevaret.
- Støtten til den RISC-lignende arkitektur NDS32, der blev brugt i processorer fra Andes Technologies, er ophørt. Koden er fjernet på grund af manglende vedligeholdelse og uanvendt støtte til NDS32 i hovedkernen af Linux (de resterende brugere anvender specialbyggede kerner fra hardwareproducenterne).
- Som standard er kernebygningen med støtte til a.out eksekverbare filformater for arkitekturerne alpha og m68k, hvor dette format stadig bruges, deaktiveret. Det er sandsynligt, at understøttelsen af det forældede a.out-format snart vil blive helt fjernet fra kernen. Planer om at fjerne a.out formatet har været diskuteret siden 2019.
- Der er implementeret minimal støtte til vDSO (virtual dynamic shared objects) mekanismen for PA-RISC arkitekturen, som giver et begrænset sæt systemkald tilgængelige i brugerrum uden kontekstskifte. Støtten til vDSO har gjort det muligt at køre med et ikke-eksekverbart stack.
- Støtten til Intel HFI (Hardware Feedback Interface) mekanismen er tilføjet, så hardware kan overføre oplysninger om den aktuelle ydeevne og energieffektivitet for hver CPU til kernen.
- Der er tilføjet en driver til Intel SDSi (Software-Defined Silicon) mekanismen, der giver mulighed for at styre aktiveringen af ekstra funktioner i processoren (for eksempel specialiserede instruktioner og ekstra cache). Ideen er, at chips med låste udvidede funktioner kan leveres til en lavere pris, og at yderligere funktioner kan "købes" og aktiveres uden at skulle erstatte chippen.
- Driveren amd_hsmp er tilføjet for at understøtte AMD HSMP (Host System Management Port) interface, der giver adgang til processorstyringsfunktioner via et sæt særlige registre, der er blevet introduceret i serverprocessorene AMD EPYC med generation Fam19h. For eksempel kan man gennem HSMP få data om energiforbrug og temperatur, sætte grænser for frekvensen, aktivere forskellige præstationsforbedringsmetoder og styre hukommelsens driftsparametre.
- I io_uring's asynkrone input/output interface er muligheden IORING_SETUP_SUBMIT_ALL implementeret for at registrere et sæt filbeskrivelser i ringbufferen, samt operationen IORING_OP_MSG_RING, som gør det muligt at sende et signal fra en ringbuffer til en anden ringbuffer.
- I DAMOS (Data Access Monitoring-based Operation Schemes) mekanismen, som giver mulighed for at frigive hukommelse baseret på tilgængelighedsfrekvensen, er mulighederne for kontrol af hukommelsesoperationer fra brugerrum blevet udvidet.
- Den tredje serie patches er integreret med implementeringen af konceptet med hukommelsessider (page folios), som ligner sammenlagte hukommelsessider (compound pages), men adskiller sig med en forbedret semantik og en mere forståelig organisationsstruktur. Brugen af folios muliggør hurtigere hukommelsesstyring i nogle delsystemer af kernen. I de foreslåede patches er der sket en overgang til folios i interne hukommelsesstyringsfunktioner, inklusive varianter af funktionen get_user_pages(). Der er givet støtte til oprettelse af store folios i koden til prædiktiv datalæsning.
- I build-systemet er der blevet tilføjet støtte til miljøvariablerne USERCFLAGS og USERLDFLAGS, hvormed der kan gives yderligere flags til compileren og linker.
- I eBPF subsystemet er BTF (BPF Type Format) mekanismen, der giver information til typekontrol i BPF-pseudokode, blevet implementeret med mulighed for at tilføje annotationer til variabler, der refererer til hukommelsesområder i brugerrum. Annotationerne hjælper BPF-kodeverifikationssystemet med mere effektivt at identificere og undersøge hukommelsesadgang.
- En ny hukommelsestildelingshandler er blevet foreslået til opbevaring af indlæste BPF-programmer, som muliggør en mere effektiv hukommelsesudnyttelse i situationer med indlæsning af et stort antal BPF-programmer.
- I systemopkaldet madvise() er der blevet tilføjet en flag MADV_DONTNEED_LOCKED, som supplerer det eksisterende flag MADV_DONTNEED, hvorigennem kernen kan informeres på forhånd om den kommende frigivelse af en hukommelsesblok, dvs. at denne blok ikke længere er nødvendig og kan anvendes af kernen. I modsætning til MADV_DONTNEED er brugen af flaget MADV_DONTNEED_LOCKED tilladt for sider i hukommelsen, der er fastgjort i RAM, som ved kaldet til madvise bliver presset ud uden skift af deres faste status, og i tilfælde af en efterfølgende anmodning til blokken og generering af en "page fault" kommer tilbage med bibeholdt binding. Yderligere er der tilføjet en ændring, der muliggør brugen af flaget MADV_DONTNEED med store hukommelsessider i HugeTLB.
- Virtualisering og sikkerhed
- For x86-arkitekturen er der tilføjet støtte til beskyttelsesmekanismen Intel IBT (Indirect Branch Tracking), som forhindrer brug af teknikker til at opbygge exploits ved hjælp af return-orienteret programmering (ROP), hvor et exploit dannes i form af en kæde af opkald til allerede eksisterende maskininstruktioner i hukommelsen, der afsluttes med en kommando for at returnere kontrol (normalt er dette afslutningen på funktioner). Essensen af den implementerede beskyttelsesmetode er at blokere indirekte spring ind i funktionens krop ved at tilføje en særlig instruktion, ENDBR, i begyndelsen af funktionen og kun tillade udførelse via et indirekte spring, hvis der springes til denne instruktion (et indirekte opkald via JMP og CALL skal altid ramme instruktionen ENDBR, som er placeret i begyndelsen af funktionen).
- Der er indført en strengere grænsekontrol for buffers i funktionerne memcpy(), memmove() og memset(), der udføres under kompileringen, når CONFIG_FORTIFY_SOURCE-moden er aktiveret. Den tilføjede ændring indebærer kontrol af, om der overskrides grænserne for elementer i strukturer, som har kendte størrelser. Det bemærkes, at den implementerede funktion ville blokere alle bufferoverflow-relaterede problemer i kernen, der er blevet identificeret i hvert fald i de seneste tre år.
- Den anden del af koden til den opdaterede implementering af RDRAND pseudo-tilfældighedsgeneratoren er blevet tilføjet, som er ansvarlig for driften af enhederne /dev/random og /dev/urandom. Den nye implementering er bemærkelsesværdig for ensartetheden i driften af /dev/random og /dev/urandom, samt for tilføjelsen af beskyttelse mod duplikater i den tilfældige talstrøm ved opstart. virtual machines og overgangen til brugen af hash-funktionen BLAKE2s i stedet for SHA1 til entropiblandingsoperationer. Denne ændring har forbedret sikkerheden for pseudo-tilfældighedsgeneratoren ved at fjerne det problematiske SHA1-algoritme og undgå overskrivning af RNG-initieringsvektoren. Da BLAKE2s-algoritmen overgår SHA1 i ydeevne, har dens anvendelse også haft en positiv indvirkning på præstationerne.
- Til ARM64-arkitekturen er der tilføjet understøttelse af den nye algoritme til autentificering af pegepinde - "QARMA3", som er hurtigere end QARMA, mens det sikrer det nødvendige beskyttelsesniveau. Teknologien muliggør brugen af specialiserede ARM64-instruktioner til at verificere returadresser ved hjælp af digitale signaturer, der gemmes i de ubrugte øverste bits af selve pegepinden.
- Til ARM64-arkitekturen er der implementeret understøttelse af at bygge med aktivering af beskyttelsen mod overskrivning af returadressen fra funktionen ved buffer-overløb i stacken i GCC 12. Essensen af beskyttelsen er, at efter kontroloverførsel til funktionen gemmes returadressen i en separat "skygge"-stack, der hentes før funktionen afsluttes.
- En ny nøglering - "machine" - er blevet tilføjet, som indeholder systemejers nøgler (MOK, Machine Owner Keys), der understøttes i shim-bootloaderen. Disse nøgler kan bruges til at bekræfte digitale signaturer af kernelkomponenter, der indlæses efter den indledende opstart (f.eks. kerne-moduler).
- Understøttelse af asymmetrisk private nøgler til TPM, som blev foreslået i den forældede version af TPM, er blevet fjernet, da de har kendte sikkerhedsproblemer og ikke har fået praktisk anvendelse.
- Der er tilføjet beskyttelse af data af typen size_t mod heltals overflow. I koden anvendes størrelsesbehandlere size_mul(), size_add() og size_sub(), som muliggør sikre multiplikationer, additioner og subtraktioner af størrelser med typen size_t.
- Under kernelloggen er indstillingerne "-Warray-bounds" og "-Wzero-length-bounds" aktiveret, der giver advarsler når indekset overskrider array-grænserne og ved brug af arrays med nul længde.
- Der er tilføjet support til RSA-algoritmen i virtio-crypto enheden for kryptering.
- Netværkssubsystem
- Implementeringen af netværksbroer har fået tilføjet support til portbinding mode (locked mode), hvor brugeren kun kan sende trafik gennem en port med en tilladt MAC-adresse. Der er også tilføjet mulighed for at bruge flere strukturer til at vurdere status for STP-protokollen (Spanning Tree Protocol). Tidligere kunne VLAN kun have direkte binding til STP (1:1), hvor hver VLAN blev styret uafhængigt. I den nye version er parameteren mst_enable tilføjet, som, når den er aktiveret, giver kontrol over VLAN-ernes tilstand gennem MST (Multiple Spanning Trees) modulet, og VLAN-binding kan svare til M:N-modellen.
- Arbejdet med at integrere midler til sporing af årsager til pakkeafvisninger (årsagskoder) i netværksstakken er fortsat. Årsagskoden overføres under frigivelse af det hukommelse, der er knyttet til pakken, og muliggør registrering af situationer som pakkeafvisning på grund af fejl i headerfelter, spoofing opdaget af rp_filter, forkert kontrolsum, utilstrækkelig hukommelse, IPSec XFRM-regler, forkert TCP-sekvensnummer osv.
- Muligheden for at overføre netværkspakker fra BPF-programmer, der køres fra brugerens rum i BPF_PROG_RUN mode, er blevet givet, hvor BPF-programmer kører i kernen, men returnerer resultatet til brugerens rum. Pakker overføres via XDP (eXpress Data Path) subsystemet. Live-pakke behandlingsmode understøttes, hvor XDP-behandleren kan omdirigere netværkspakker til netværksstakken eller andre enheder under behandling. Det er også muligt at oprette softwaregenererede eksterne trafikgeneratorer eller indsætte netværksrammer i netværksstakken.
- For BPF-programmer, der er knyttet til netværkscgroups, er der tilbudt hjælpefunktioner til eksplicit at angive værdien, som returneres af systemopkald, hvilket giver mulighed for at videregive mere fuldstændige oplysninger om årsagerne til blokeringen af systemopkald.
- XDP (eXpress Data Path) subsystem har fået tilføjet støtte til fragmenterede pakker, der placeres i flere buffere, hvilket muliggør behandling af Jumbo-rammer i XDP og anvendelse af TSO/GRO (TCP Segmentation Offload/Generic Receive Offload) for XDP_REDIRECT.
- Processen til at fjerne netværksnavneområder er blevet markant accelereret, hvilket var efterspurgt i nogle store systemer med høj trafik.
- Udstyr
- I amdgpu-driveren er teknologien til adaptiv synkronisering FreeSync som standard aktiveret, hvilket tillader justering af opdateringsfrekvensen på skærmen og sikrer glidende bevægelse uden billedforskydninger under spil og videoafspilning. Støtten til GPU Aldebaran er blevet erklæret stabil.
- i915-driveren har fået tilføjet støtte til Intel Alderlake N-chips og Intel DG2-G12 (Arc Alchemist) diskrete grafikkort.
- I nouveau-driveren er der tilføjet støtte til højere bithastigheder for DP/eDP-grænseflader og support for kabelforlængere kaldet lttprs (Link-Training Tunable PHY Repeaters).
- I drm (Direct Rendering Manager) subsystemet er der i driverne for armada, exynos, gma500, hyperv, imx, ingenic, mcde, mediatek, msm, omap, rcar-du, rockchip, sprd, sti, tegra, tilcdc, xen og vc4 tilføjet støtte til parameteren nomodeset, som muliggør deaktivering af videoindstillingsskift på kerneniveau og brug af hardwareaccelerationsværktøjer, så kun funktionaliteten relateret til systemrammen bevares.
- Støtten til ARM SoCs Qualcomm Snapdragon 625/632 (bruges i LG Nexus 5X og Fairphone FP3), Samsung Exynos 850, Samsung Exynos 7885 (bruges i Samsung Galaxy A8), Airoha (Mediatek/EcoNet) EN7523, Mediatek mt6582 (tablet Prestigio PMT5008 3G), Microchip Lan966, Renesas RZ/G2LC, RZ/V2L, Tesla FSD, TI K3/AM62 og i.MXRTxxxx er blevet tilføjet.
- Støtten til ARM-enheder og -kort fra Broadcom (Raspberry Pi Zero 2 W), Qualcomm (Google Herobrine R1 Chromebook, SHIFT6mq, Samsung Galaxy Book2), Rockchip (Pine64 PineNote, Bananapi-R2-Pro, STM32 Emtrion emSBS, Samsung Galaxy Tab S, Prestigio PMT5008 3G tablet), Allwinner (A20-Marsboard), Amlogic (Amediatek X96-AIR, CYX A95XF3-AIR, Haochuangy H96-Max, Amlogic AQ222 og OSMC Vero 4K+), Aspeed (Quanta S6Q, ASRock ROMED8HM3), Marvell MVEBU/Armada (Ctera C200 V1 og V2 NAS), Mstar (DongShanPiOne, Miyoo Mini), NXP i.MX (Protonic PRT8MM, emCON-MX8M Mini, Toradex Verdin, Gateworks GW7903) er blevet tilføjet.
- Støtten til lydsystemer og codecs som AMD PDM, Atmel PDMC, Awinic AW8738, i.MX TLV320AIC31xx, Intel CS35L41, ESSX8336, Mediatek MT8181, nVidia Tegra234, Qualcomm SC7280, Renesas RZ/V2L, Texas Instruments TAS585M er blevet tilføjet. Den indledende implementering af lyddriveren for Intel AVS DSP-chip er blevet opdateret. Der er opdateret støtte til drivere for Intel ADL og Tegra234, samt ændringer er blevet foretaget for at forbedre lydunderstøttelsen på enheder fra Dell, HP, Lenovo, ASUS, Samsung og Clevo.
Samtidig har den latinamerikanske Free Software Foundation udviklet en helt fri version af kernemodellen 5.18 - Linux-libre 5.18-gnu, som er renset for firmware- og driverkomponenter, der indeholder ikke-frie elementer eller kode, hvis anvendelse er begrænset af producenten. I den nye udgave er drivere for MIPI DBI-paneler, VPU Amphion, WiFi MediaTek MT7986 WMAC, Mediatek MT7921U (USB) og Realtek 8852a/8852c, Intel AVS audiochips og Texas Instruments TAS5805M blevet renset. Der er også blevet renset DTS-filer for forskellige SoC Qualcomm med AArch64-arkitektur. Koden til rensning af blobs i AMD GPU-drivere og -undersystemer, MediaTek MT7915, Silicon Labs WF200+ WiFi, Mellanox Spectrum Ethernet, Realtek rtw8852c, Qualcomm Q6V5, Wolfson ADSP, MediaTek HCI UART er blevet opdateret.
Kilde: opennet.ru
