Efter tvÄ mÄnaders utveckling presenterade Linus Torvalds releasen av kÀrnan Linux 6.6. Bland de mest framtrÀdande förÀndringarna: en ny uppgiftsscheduler EEVDF; en mekanism för skugga av stacken för att skydda mot exploateringar; stöd för fs-verity i OverlayFS; implementering av kvoter och xattr i tmpfs; förberedelse av online fsck i XFS; förbÀttrad övervakning av export av 'GPL-only' symboler; stöd för nÀtverksocketar i io_uring; randomisering av minne i kmalloc(); ReiserFS har deklarerats förÄldrad; primitiver för Vulkan-drivrutinen NVK har lagts till i Nouveau.
I den nya versionen har 15291 korrigeringar accepterats frÄn 2058 utvecklare, patchens storlek Àr 39 MB (förÀndringarna omfattade 14844 filer, 553359 kodrader lades till och 284012 kodrader togs bort). I den föregÄende utgÄvan fanns 14674 korrigeringar frÄn 2016 utvecklare, patchens storlek var 78 MB. UngefÀr 44% av de förÀndringar som presenterades i 6.6 Àr relaterade till enhetsdrivrutiner, ungefÀr 17% av förÀndringarna har att göra med uppdatering av kod som Àr specifik för hÄrdvaruarkitekturer, 11% Àr relaterade till nÀtverksstacken, 4% till filsystem och 3% till interna kÀrnsystem.
Huvudnyheterna i kÀrnan 6.6:
- Minne och systemtjÀnster
- En ny uppgiftsscheduler EEVDF (Earliest Eligible Virtual Deadline First) har implementerats, som ersÀtter CFS (Completely Fair Scheduler) som levererades frÄn och med kÀrnan 2.6.23. Den nya schemalÀggaren beaktar vid valet av nÀsta process att överföra exekvering, processer som inte har fÄtt tillrÀckliga processorresurser eller som har fÄtt orÀttvist mycket processorstid. I det första fallet tvingas överföring av kontroll till processen, medan den i det andra fallet skjuts upp. Den gamla schemalÀggaren CFS anvÀnde heuristik och finjusteringar för att identifiera processer som krÀvde sÀrskild uppmÀrksamhet, medan den nya schemalÀggaren spÄrar dem mer tydligt och krÀver ingen finjustering. Det förvÀntas att EEVDF kommer att minska fördröjningar vid exekvering av uppgifter, som CFS hade problem med nÀr det gÀllde schemalÀggning.
- Ăndringar har införts i hanteringen av interna symboler för kategorin "GPL-only", avsedda att komplicera anvĂ€ndningen av proprietĂ€ra GPL-lager för att kringgĂ„ Ă„tkomstbegrĂ€nsningar till kĂ€rnsystem som endast tillĂ„ter kod under GPL-licens. I funktionen symbol_get() Ă€r sökningar av symboler markerade som GPL-only förbjudna för proprietĂ€ra moduler, och vice versa, GPL-moduler kommer inte kunna hitta symboler som exporteras av proprietĂ€ra moduler.
- Ytterligare instÀllningar för arbetsköer (unbound workqueue) har lagts till för att öka effektiviteten i ÄteranvÀndning av processorcache pÄ stora system med flera tredje nivÄns cache (L3). I kÀrnan ingÄr ocksÄ verktyget tools/workqueue/wq_dump.py för att kontrollera den aktuella konfigurationen av arbetsköer.
- Io_uring-subsystemet har fÄtt inledande stöd för operationer och kommandon specifika för nÀtverks-sockets. En sysctl io_uring_disabled har lagts till för att stÀnga av io_uring pÄ systemnivÄ. Dessutom har direkt I/O (Direct I/O) i io_uring betydligt accelererats i asynkront lÀge. Genomförda Àndringar ger en ökning av bandbredden och minskning av latens med upp till 37% vid utförande av in- och utmatningsoperationer.
- För PA-RISC-arkitekturen har en JIT-kompilator för BPF implementerats.
- InstÀllningen /sys/devices/system/cpu/smt/control har fÄtt stöd för numeriska parametrar som definierar antalet trÄdar som Àr tillgÀngliga för varje CPU-kÀrna (tidigare stöddes endast vÀrdena "on" och "off" för att aktivera och avaktivera stöd för symmetrisk multitrÄdning). Den nya funktionen kan tillÀmpas pÄ vissa PowerPC-processorer som stöder hotplug SMT-lÀget för selektiv aktivering av SMT pÄ specifika kÀrnor under drift.
- Ăverföringen av Ă€ndringarna frĂ„n Rust-for-Linux-grenen har fortsatt, relaterat till anvĂ€ndningen av Rust som det andra sprĂ„ket för utveckling av drivrutiner och kĂ€rnmoduler (Rust-stöd Ă€r inte aktiverat som standard och leder inte till att Rust blir ett obligatoriskt byggberoende för kĂ€rnan). ĂvergĂ„ngen till Rust-versioner 1.71.1 och bindgen 0.65.1 har genomförts. Draget 'Zeroable' har implementerats. Procedurmakron 'paste!' och '#[derive(Zeroable)]' har lagts till. Kompatibiliteten med '#[pin_data]' har sĂ€kerstĂ€llts. Initieringsfunktionerna '{,pin_}init_array_from_fn()' och metoden '{,pin_}chain' har lagts till. Möjligheterna i modulen 'types' har utökats. I testningsramverket kunit har möjligheten att köra tester frĂ„n Rust-dokumentationen lagts till.
- Subsystemet 'eventfs' har lagts till, vilket avsevÀrt minskar minnesanvÀndningen i spÄrningssystemet genom att eliminera behovet av att lagra överflödiga strukturer som anvÀnds för att representera spÄrningspunkter i filsystemet. Tidigare skapades sÄdana strukturer för alla spÄrningspunkter, oavsett om spÄrning anvÀndes eller inte. Med hjÀlp av eventfs kan sÄdana strukturer nu skapas dynamiskt endast vid behov.
- Möjligheterna i verktyget perf har utökats.
- Information för att diagnostisera effektiviteten av mekanismen för sammanslagning av identiska minnessidor (KSM, Kernel Samepage Merging) har lagts till i filen /proc/pid/smaps.
- API:t Frontswap har tagits bort, vilket gjorde det möjligt att placera swap-partitioner i minne som inte kan adresseras direkt och som inte tillhandahöll operativ information om tillgÄngen pÄ ledigt utrymme. Detta API anvÀndes endast i zswap, sÄ det har beslutats att direkt anvÀnda denna funktionalitet i zswap, vilket eliminerar onödiga mellanskikt.
- För RISC-V-arkitekturen har stöd för att fÄ Ätkomst till prestanda-rÀknare frÄn anvÀndarrummet lagts till, samt möjligheten att placera en kÀrndump efter en krasch i omrÄdet utanför 4GB.
- Inledande stöd för ARM SME-instruktioner (Scalable Matrix Extension) har lagts till.
- Möjlighet att anvÀnda felsökningsverktyg som KDB, KGDB, kcov, KFENCE och KASAN pÄ system med LoongArch-arkitektur har implementerats.
- Stöd har lagts till för filer för testning av kÀrnan i GitLab:s kontinuerliga integrationssystem, vilket anvÀnds vid utvecklingen av grafiska drivrutiner.
- Disksubsystem, in- och utmatning och filsystem
- I filsystemen OverlayFS har stöd för att spara fs-verity-hashar i den utökade attributen (xattr) overlay.verity lagts till, vilket kan anvÀndas för att kontrollera integriteten och Àktheten av filer i de underliggande lagren av OverlayFS med hjÀlp av kryptografiska hashfunktioner och nycklar. PÄ sÄ sÀtt innehÄller OverlayFS nu alla Àndringar som behövs för att projektet Composefs ska fungera som en överbyggnad ovanpÄ filsystemen OverlayFS och EROFS.
- I filsystemet XFS har förberedelser gjorts för att implementera möjligheten att anvÀnda verktyget fsck för att kontrollera och ÄtgÀrda identifierade problem i online-lÀge, utan att montera ur filsystemet. Dessutom har XFS implementerat möjligheten att anvÀnda stora volymer (folios) i sidcache och vissa relaterade optimeringar har lagts till, vilket har gjort att prestandan har ökat avsevÀrt för vissa typer av belastning.
- I filsystemet tmpfs har stöd lagt till för anvÀndardefinierade utökade attribut (user xattrs), direkt I/O och kvoter knutna till anvÀndare och grupper. Offseten för kataloger har stabiliserats, vilket löste problem med att exportera tmpfs via NFS.
- I API:t för montering har en flagga FSCONFIG_CMD_CREATE_EXCL lagts till för att öka sĂ€kerheten, vilket förbjuder delad anvĂ€ndning av superblocket pĂ„ flera monteringspunkter (det förbjuder att koppla ett parti till flera monteringspunkter). I verktyget mount har en möjlighet att inkludera denna flagga föreslagits med alternativet "âexclusive".
- I VFS-underkategorin har stöd för omedelbar Àndring av atime- och mtime-parametrar lagts till. Tidigare Äterspeglades tidsinformation med viss fördröjning, vilket gjorde det svÄrt att spÄra aktualiteten i data i cache i system som liknar NFS (pÄ grund av fördröjningen i att upptÀcka Àndringar i filen kunde systemet felaktigt tro att data i cachen var aktuella). Den nya funktionen Àr tillgÀnglig för Btrfs, Ext4, tmpfs och XFS.
- I Btrfs har den inbyggda mekanismen för integritetskontroll, som aktiveras vid kompilering med parametern BTRFS_FS_CHECK_INTEGRITY, förklarats som förÄldrad. Denna mekanism har inte lÀngre underhÄllits, testas inte lÀngre och skapar en extra belastning pÄ CPU och minne. Dessutom har prestandan i den nya kontrollkoden för filsystemet (scrub) i Btrfs optimerats.
- I filsystemet Ext4 har det lagts till periodiska kontroller för att uppdatera superblocket och operationer för minnesallokering har pÄskyndats vid appendering till slutet av filen.
- I FUSE-subsystemet har stöd för attributet btime ("födelsetid") lagts till, vilket definierar tidpunkten för skapandet av inoden.
- Ăndring av Ă„tkomstrĂ€ttigheter för symboliska lĂ€nkar Ă€r förbjudet.
- Det har lagts till ett systemanrop fchmodat2(), som skiljer sig frÄn systemanropet fchmodat() genom att ha en extra parameter för att ange flaggor. Av flaggorna stöds för nÀrvarande endast AT_SYMLINK_NOFOLLOW och AT_EMPTY_PATH, vilket gör det möjligt att implementera ett förbud mot avlÀnkning av symboliska lÀnkar och att anvÀnda filbeskrivaren vid angivande av en tom sökvÀg utan omvÀgar i libc-funktionen fchmodat().
- I EROFS-filsystemet (Extendable Read-Only File System), som Àr avsett för anvÀndning pÄ partitioner som Àr tillgÀngliga i skrivskyddat lÀge, har stöd för komprimeringsalgoritmen Deflate lagts till. För att pÄskynda sökningen av utökade attribut har en sannolikhetsstruktur i form av bloom filter implementerats.
- En instÀllning CONFIG_BUFFER_HEAD har lagts till, vilket möjliggör uppbyggnad av kÀrnan utan att anvÀnda strukturen buffer_head. Vid uppbyggnad utan buffer_head kan blockenheter och vissa filsystem anvÀndas, exempelvis xfs, btrfs, cramfs, erofs och squashfs.
- I blockenhetsdrivaren ublk, som gör det möjligt att flytta specifik logik till anvÀndarprocessens utrymme, har stöd för zonerade lagringsenheter lagts till (uppdelning i zoner av blockgrupper eller sektorer, dÀr endast sekventiell tillÀgg av data Àr tillÄten med uppdatering av hela blockgruppens innehÄll).
- Genomförandet av filsystemet ReiserFS har flyttats frÄn kategorin stödda till att betraktas som förÄldrad (Obsolete). Stödet för ReiserFS planeras att upphöra Är 2025. Orsaken till att ReiserFS har klassificerats som förÄldrat anges vara stagnation i underhÄllet av detta filsystem, olösta problem relaterade till Är 2038, brist pÄ möjligheter att sÀkerstÀlla redundans och önskan att minska arbetskostnaderna för underhÄllet av allmÀnna Àndringar för filsystem relaterade till det nya API:t för montering, iomap och folios.
- I NFS-servern har en mekanism för delegering av skrivoperationer för NFSv4 implementerats, vilket ökar effektiviteten i cachningen av skrivfiler för att minska trafik. Stöd för operationen READ_PLUS, definierad i NFS 4.2, har lagts till.
- Stödet för fscrypt har lagts till i Ceph-filsystemet.
- Virtualisering och sÀkerhet
- En implementation av mekanismen Shadow Stack har lagts till, som blockerar mÄnga exploiter genom att anvÀnda Intel-processorns hÄrdvarufunktioner för att skydda mot överskrivning av returadressen frÄn en funktion vid bufferöverflöd i stacken. Skyddets kÀrna Àr att efter att kontrollen har överförts till en funktion, sparas returadressen av processorn inte bara i den vanliga stacken, utan Àven i en separat "skuggstack" som inte kan Àndras direkt. Innan man lÀmnar funktionen extraheras returadressen frÄn skuggstacken och jÀmförs med returadressen frÄn den vanliga stacken. En mismatch mellan adresser resulterar i en undantagsgenerering som blockerar situationer dÀr en exploit har lyckats överskriva adressen i den vanliga stacken. HÄrdvaruskuggstacken stöds endast i 64-bitar-versioner, medan det i 32-bitar-versioner anvÀnds mjukvaru-emulering.
- Stödet för Clang-kompilatorns sammansÀttning med aktiverat CFI (Control Flow Integrity) skydd har lagts till, vilket blockerar avvikelser frÄn den normala exekveringsordningen (control flow) som ett resultat av exploiter som Àndrar de funktioner som lagras i minnet.
- För RISC-V-arkitekturen har randomisering av kÀrnans minnesplacering vid start lagts till.
- En flagga SECCOMP_USER_NOTIF_FD_SYNC_WAKE_UP har lagts till i systemanropet seccomp(), vilket möjliggör bearbetning av hÀndelser frÄn övervakade processer i synkront lÀge för en mer effektiv arbetsplanering.
- Funktionen kmalloc() har fÄtt randomisering av slab-cache, vilket gör det svÄrare att utnyttja sÄrbarheter i kÀrnan.
- I alternativen kopplade till aktiveringen av SELinux tvingande Ätkomstkontroll har nÀmningen av det amerikanska sÀkerhetsdepartementet tagits bort. Eftersom projektet har utvecklats under 20 Är under samhÀllets vingar och stöds av oberoende underhÄllare har man beslutat att övergÄ till att anvÀnda namnet "SELinux" istÀllet för "NSA SELinux" i kommentarer och dokumentation i Kconfig (till exempel har förklaringen till kompilationsparametern SECURITY_SELINUX Àndrats frÄn "NSA SELinux Support" till "SELinux Support").
- En operation UFFDIO_POISON har lagts till i systemanropet userfaultfd(), vilket gör det möjligt att markera minnessidor som "förgiftade" (poisoned), vilket kan anvÀndas för att flytta skadade minnessidor vid migration virtuella maskiner frÄn ett system till ett annat.
- Ett nytt teckenbaserat grÀnssnitt har lagts till i VFIO-systemet (/dev/vfio/devices/vfioX) för att hantera VFIO-enheter, vilket möjliggör för anvÀndaren att direkt öppna en fil med enheten utan att behöva anvÀnda det förÄldrade gruppgrÀnssnittet /dev/vfio/$groupID.
- I servern Stödet för förÄldrade Kerberos-krypteringstyper som anvÀnder algoritmerna DES och 3DES har upphört i NFS.
- Vid körning i Hyper-V-hypervisorns miljö har stödet för gÀstsystem lagts till, vilket skyddas av AMD SEV-SNP (Secure Nested Paging) och Intel TDX (Trusted Domain Extensions).
- Vid kompilering av kÀrnan i lÀget "W=1" har standardkompilatorn aktiverat varningarna "-Wformat-overflow", "-Wformat-truncation", "-Wstringop-overflow" och "-Wrestrict". För alla byggen har varningen "-Wenum-conversion" aktiverats.
- NĂ€tverkssystemet
- Implementeringen av adressfamiljen AF_XDP (eXpress Data Path) har utvidgats med möjlighet att arbeta med paket som lagras i flera buffertar (till exempel kan en buffert innehÄlla paketets header och en annan data, eller i en kedja av flera buffertar kan stora jumbo- Ethernet-ramar placeras). Program som anvÀnder AF_XDP-sockets kan nu ta emot och överföra paket direkt frÄn flera buffertar.
- BPF-systemet har fÄtt stöd för defragmentering av IPv4- och IPv6-paket samt möjlighet att filtrera fragmenterade paket.
- En ny hanterare, update_socket_protocol, har lagts till i BPF, vilket gör att BPF-program kan Àndra den begÀrda protokollen för nya sockets. Till exempel kan ett BPF-program transparens byta protokollet TCP mot MPTCP (multipath TCP) för att optimera applikationens trafik. BPF har ocksÄ fÄtt stöd för att hantera paketrouting genom olika strömmar i MPTCP.
- Den experimentella beteckningen för modulen ksmbd, som erbjuder en kÀrnnivÄimplementation av en filserver baserad pÄ SMB3-protokollet, har tagits bort. Stöd för sammanslagning av lÀsoperationer ("read compound"-förfrÄgningar) har lagts till.
- Utrustning
- Ăndringar har gjorts i DRM-systemet (Direct Rendering Manager) för att möjliggöra effektiv drift av den öppna NVK-drivaren med implementeringen av grafik-API:et Vulkan för NVIDIA-grafikkort. Ursprungligen var DRM-drivrutinen Nouveau utformad för att stödja OpenGL, sĂ„ den saknar primitiva element som krĂ€vs för effektiv drift av Vulkan-drivrutiner, till exempel stöd för synkroniserade objekt och hantering av virtuellt adressutrymme.
- I AMDGPU-drivrutinen har stöd för SDMA 6.1.0, HDP 6.1, SMUIO 14.0, PSP 14.0, IH 6.1 och GFX 9.4.3 implementerats. Koden för att ladda PSP-firmware (Platform Security Processor) har omarbetats. Stödet för den adaptiva synkroniseringstekniken FreeSync har utvidgats (stöd för Freesync Panel Replay V2 har lagts till).
- I i915-drivrutinen fortsÀtter implementeringen av stöd för Intel Meteor Lake-chips. Stödet för HDCP-teknik (High-bandwidth Digital Content Protection) har förbÀttrats. Koden för interaktion med displayen har omarbetats.
- Alternativen för att inaktivera mikroprogramsladdningsfunktioner under byggfasen â MICROCODE_INTEL och MICROCODE_AMD har tagits bort frĂ„n Kconfig. KĂ€rnan byggs nu alltid med mikroprogramsladdningskoden för x86-system, men den faktiska laddningen av mikroprogrammet kan inaktiveras genom att ange kĂ€rnparametern âdis_ucode_ldrâ.
- Den ljudsystemet har fÄtt möjlighet att styra ljudenheter anslutna via IIO (Industrial I/O) subsystemet.
- Stöd har lagts till för ljudgrÀnssnitten Intel LunarLake, Intel ArrowLake och AMD ACP5x, codec Cirrus Logic CS42L43, Realtek RT1017 och TI TAS2781, samt förstÀrkare Cirrus Logic CS35L56 och winic aw88261. Stöd för ASoC AMD Van Gogh har lagts till.
- En USB MIDI 2.0 Gadget-drivrutin har lagts till, som emulerar USB MIDI 2.0-grÀnssnittet kopplat till ALSA UMP rawmidi-enheten.
- Stöd har lagts till för Ethernet-kontroller Broadcom ASP 2.0 och Marvell 88Q2XXX.
- Stöd har lagts till för Visionox R66451, TDO TL050HDV35, KD070FHFID015, Inanbo T28CP45TN89 och EDT ET028013DMA-paneler, displaykontroller för Loongson och pekskÀrmskontroller för Azoteq IQS7222D/IQS7210A/7211A.
- Stöd har lagts till för ARM SoC Qualcomm SM4450 (Snapdragon 4 Gen 2), TI AM62P5, Intel Agilex5, Qualcomm ipq5018, AN400 (Amlogic T7).
- Stöd har lagts till för ARM-plattformar som Samsung Galaxy Tab 3 8.0, FriendlyElec NanoPC T6, Amlogic A311D2, Khadas Vim4, Xiaomi SM7125, Facebook Yosemite 4, Orange Pi Zero 3, Radxa ROCK 4SE.
Samtidigt har den latinamerikanska Free Software Foundation utvecklat en helt fri kĂ€rnvariant 6.6 â Linux-libre 6.6-gnu, som Ă€r rensad frĂ„n firmware och drivrutiner som innehĂ„ller icke-fria komponenter eller kodavsnitt vars anvĂ€ndning Ă€r begrĂ€nsad av tillverkaren. I version 6.6 har koden för att rensa blobbar uppdaterats i olika drivrutiner och subsystem, exempelvis i TI gigabit RU ethernet-drivrutiner, MediaTek 792x wifi, Cirrus Logic cs42l43 mfd, cs35l56 HD-ljud och aw88261 SoC. Blob-namn har rensats i dts-filer för Aarch64-arkitekturen. Blobbar har tagits bort i nya ivpu-drivrutiner, bluetooth-drivrutiner, pekskĂ€rm-drivrutiner och i Qualcomm Venus V4L2 kodare/decoder.
KĂ€lla: opennet.ru
