Efter tvÄ mÄnader av utveckling presenterade Linus Torvalds slÀppet av Linux-kÀrnan 6.2. Bland de mest framtrÀdande förÀndringarna: stöd för kod under Copyleft-Next-licensen har tillÄtits, RAID5/6-implementeringen i Btrfs har förbÀttrats, integrationen av Rust-sprÄkets stöd har fortsatt, overheaden för skydd mot Retbleed-attacker har minskats, möjligheten att reglera minnesanvÀndningen under bakÄtskrivning har lagts till, en mekanism för balanshantering av TCP (Protective Load Balancing) har lagts till, en hybridmekanism för skydd av körordens utförande (FineIBT) har lagts till, i BPF har möjligheten att definiera egna objekt och datatyper införts, verktyget rv (Runtime Verification) har inkluderats, och energiförbrukningen i implementationen av RCU-lÄs har minskat.
I den nya versionen har 16843 korrigeringar frÄn 2178 utvecklare accepterats, patchens storlek Àr 62 MB (Àndringarna berör 14108 filer, 730195 kodrader har lagts till och 409485 kodrader har tagits bort). UngefÀr 42% av alla förÀndringar i 6.2 Àr relaterade till enhetsdrivrutiner, cirka 16% av förÀndringarna har att göra med uppdatering av hÄrdvaruarkitektur-specifik kod, 12% relaterar till nÀtverksstacken, 4% till filsystem och 3% till kÀrnans interna subsystems.
Huvudnyheterna i kÀrnan 6.2:
- Minne och systemtjÀnster
- Det har blivit tillÄtet att inkludera kod och förÀndringar i kÀrnan som tillhandahÄlls under licensen Copyleft-Next 0.3.1. Licensen Copyleft-Next har skapats av en av upphovsmÀnnen till GPLv3 och Àr helt kompatibel med GPLv2, vilket bekrÀftats av jurister pÄ företagen SUSE och Red Hat. JÀmfört med GPLv2 Àr Copyleft-Next betydligt mer kompakt och lÀttare att förstÄ (inledningen och nÀmningen av förÄldrade kompromisser har tagits bort), den definierar tidsramar och procedurer för att ÄtgÀrda övertrÀdelser och tar automatiskt bort copyleft-kraven för förÄldrade verk som Àr över 15 Är gamla.
Copyleft-Next innehÄller ocksÄ en punkt om att ge rÀttigheter till patenterad teknik, vilket, till skillnad frÄn GPLv2, gör denna licens kompatibel med Apache 2.0-licensen. För att sÀkerstÀlla full kompatibilitet med GPLv2 anges det i texten till Copyleft-Next att hÀrledda verk kan tillhandahÄllas inte bara under den ursprungliga Copyleft-Next-licensen utan ocksÄ under GPL-licensen.
- I paketet ingÄr verktyget "rv", som tillhandahÄller ett grÀnssnitt för interaktion frÄn anvÀndarrummet med RV (Runtime Verification) subsystemets handlare, avsett för att kontrollera korrektheten av driften pÄ högre pÄlitliga system som garanterar avbrottsfri drift. Kontroll utförs under körning genom att bifoga handlare till spÄrningspunkter som jÀmför den faktiska exekveringen med en fördefinierad referensdeterministisk modell av automaten, som definierar systemets förvÀntade beteende.
- I enheten zRAM, som möjliggör lagring av en vÀxlingspartition i minnet i komprimerad form (ett blockenhet skapas i minnet för svapping med kompression), har möjligheten att ompacka sidor med ett alternativt algoritm implementerats för att uppnÄ en högre komprimeringsnivÄ. Huvudidén Àr att ge val mellan flera algoritmer (lzo, lzo-rle, lz4, lz4hc, zstd), som erbjuder sina kompromisser mellan hastighet för komprimering/uppackning och komprimeringsnivÄ eller Àr optimala i sÀrskilda situationer (t.ex. för att komprimera stora minnessidor).
- API:t "iommufd" har lagts till för att hantera in- och utdata minneshanteringssystemet IOMMU (I/O Memory-Management Unit) frÄn anvÀndarrummet. Det nya API:t ger möjlighet att hantera in- och utdata minnessidtabeller med hjÀlp av filbeskrivare.
- I BPF har möjligheten att skapa typer, definiera egna objekt, bygga sin egen objektstruktur och flexibelt utforma egna datastrukturer, som lÀnkade listor, tillhandahÄllits. För BPF-program som gÄr in i vilolÀge (BPF_F_SLEEPABLE) har stöd för lÄsning via bpf_rcu_read_{,un}lock() lagts till. Stöd för att spara objekt av typen task_struct har implementerats. En map-typ BPF_MAP_TYPE_CGRP_STORAGE har lagts till, som tillhandahÄller lokal lagring för cgroups.
- För RCU (Read-copy-update) lÄsmekanismen har en valfri mekanism för "latenta" callback-anrop implementerats, dÀr flera callback-anrop behandlas samtidigt i batchlÀge via en timer. TillÀmpningen av den föreslagna optimeringen gör det möjligt att minska energiförbrukningen med 5-10 % pÄ Android- och ChromeOS-enheter genom att skjuta upp RCU-förfrÄgningar under stillastÄende eller lÄg belastning pÄ systemet.
- En sysctl split_lock_mitigate har lagts till för att hantera systemets reaktion nÀr split-lÄs upptÀcks, vilket uppstÄr vid Ätkomst till ojusterade data i minnet eftersom de vid utförande av atomÀra instruktioner korsar tvÄ CPU-cachelinjer. SÄdana lÄs leder till en betydande nedgÄng i prestanda. NÀr split_lock_mitigate sÀtts till vÀrdet 0 visas endast en varning om problemet, medan vÀrdet 1 utöver att visa en varning ocksÄ sÀnker hastigheten pÄ den process som orsakat lÄset för att bevara prestandan hos resten av systemet.
- För PowerPC-arkitekturen har en ny implementering av qspinlock-lÄs föreslagits, vilket visar högre prestanda och löser vissa lÄsproblem som uppstÄr i exceptionella fall.
- Koden för hantering av MSI (Message-Signaled Interrupts) har omarbetats, dÀr kvarstÄende arkitekturproblem har ÄtgÀrdats och stöd för bindning av separata handlare till olika enheter har lagts till.
- För system baserade pÄ LoongArch instruktion-set arkitekturen, som anvÀnds i Loongson 3 5000 processorer och implementerar ett nytt RISC ISA liknande MIPS och RISC-V, har stöd för ftrace, stackskydd, vilande och vÀntande lÀgen implementerats.
- Möjligheten att ge namn till omrÄden med delad anonym minne har introducerats (tidigare kunde namn endast tilldelas privat anonym minne, kopplat till en viss process).
- En ny parameter för kÀrnans kommandorad "trace_trigger" har lagts till, avsedd för att aktivera en spÄrningsutlösare som anvÀnds för att binda villkorliga kommandon som utlöses vid kontrollverifiering (t.ex. trace_trigger="sched_switch.stacktrace if prev_state == 2").
- Kravet pÄ versionen av binutils har höjts. För att bygga kÀrnan krÀvs nu minst binutils 2.25.
- Vid anrop av exec() har möjligheten lagts till att placera processen i ett tidsnamnrum dÀr tiden skiljer sig frÄn systemtiden.
- Ăverföringen av ytterligare funktioner frĂ„n Rust-for-Linux-grenen har inletts, relaterat till anvĂ€ndning av Rust som ett andra sprĂ„k för utveckling av drivrutiner och kĂ€rnmoduler. Stödet för Rust Ă€r inaktivt som standard och medför inte att Rust ingĂ„r i kĂ€rnans obligatorium för byggberoenden. Den grundlĂ€ggande funktionalitet som föreslogs i det föregĂ„ende slĂ€ppet har utvidgats med möjligheter för stöd av lĂ„gnivĂ„kod, sĂ„som typen Vec och makron pr_debug!(), pr_cont!() och pr_alert!(), samt den procedurala makron "#[vtable]", som förenklar arbetet med funktionstĂ€vlingstabeller. TillĂ€gg av högre Rust-wrapper runt kĂ€rnsystemen som möjliggör skapandet av fullstĂ€ndiga drivrutiner i Rust förvĂ€ntas i framtida utgĂ„vor.
- Den typ av "char" som anvÀnds i kÀrnan Àr nu som standard deklarerad som osignerad för alla arkitekturer.
- Minnesdistributionsmekanismen slab â SLOB (slab allocator) har förklarats som förĂ„ldrad, vilket var designat för system med liten minnesmĂ€ngd. IstĂ€llet rekommenderas det att anvĂ€nda SLUB eller SLAB under normala förhĂ„llanden. För system med liten minnesmĂ€ngd rekommenderas SLUB i SLUB_TINY-lĂ€get.
- Det har blivit tillÄtet att inkludera kod och förÀndringar i kÀrnan som tillhandahÄlls under licensen Copyleft-Next 0.3.1. Licensen Copyleft-Next har skapats av en av upphovsmÀnnen till GPLv3 och Àr helt kompatibel med GPLv2, vilket bekrÀftats av jurister pÄ företagen SUSE och Red Hat. JÀmfört med GPLv2 Àr Copyleft-Next betydligt mer kompakt och lÀttare att förstÄ (inledningen och nÀmningen av förÄldrade kompromisser har tagits bort), den definierar tidsramar och procedurer för att ÄtgÀrda övertrÀdelser och tar automatiskt bort copyleft-kraven för förÄldrade verk som Àr över 15 Är gamla.
- Disksubsystem, in- och utmatning och filsystem
- Btrfs har förbÀttrats för att ÄtgÀrda problemet med "write hole" i RAID 5/6-implementationen (försöket att ÄterstÀlla RAID om ett krashtillfÀlle intrÀffade under skrivningen och det Àr omöjligt att avgöra vilken block pÄ vilket av RAID-enheterna som har skrivits korrekt, vilket kan leda till förödelse av block som motsvarar oskrivna block). Dessutom aktiveras asynkron exekvering av "discard"-operationen automatiskt som standard för SSD, vilket möjliggör högre prestanda genom effektiv gruppering av "discard"-operationer i kön och bearbetning av kön av en bakgrundshanterare. Prestanda för send- och lseek-operationer samt ioctl FIEMAP har förbÀttrats.
- Möjligheterna för hantering av fördröjd skrivning (writeback, bakgrundssparande av Àndrade data) för blockenheter har utvidgats. I vissa situationer, till exempel vid anvÀndning av nÀtverksblockenheter eller USB-enheter, kan fördröjd skrivning leda till hög minnesanvÀndning. För att styra beteendet för fördröjd skrivning och hÄlla storleken pÄ sidcacheminnet inom vissa grÀnser har nya parametrar strict_limit, min_bytes, max_bytes, min_ratio_fine och max_ratio_fine föreslagits i sysfs (\/sys\/class\/bdi\/).
- I filsystemet F2FS har en ioctl-operation för atomÀr ersÀttning implementerats, vilket möjliggör skrivning av data till en fil inom ramen för en atomÀr operation. I F2FS har en blockcache för extens blivit tillagd, vilket hjÀlper till att identifiera aktiva data eller data som har varit inaktiva under en lÀngre tid.
- I filsystemet ext4 noteras endast buggfixar.
- I filsystemet ntfs3 har flera nya monteringsalternativ föreslagits: "nocase" för att hantera stor bokstav i fil- och mappenamn; windows_name för att förbjuda skapande av filnamn som innehÄller tecken ogiltiga för Windows OS; hide_dot_files för att hantera tilldelningen av attributet dolda filer för filer som börjar med en punkt.
- I filsystemet Squashfs har alternativet "threads=" implementerats, med vilket antalet trÄdar för parallellisering av uppackningsoperationer kan bestÀmmas. I Squashfs har Àven möjligheten att mappa anvÀndaridentiteter för monterade filsystem införts, vilket anvÀnds för att korrelera filer som tillhör en viss anvÀndare pÄ ett monterat frÀmmande partition med en annan anvÀndare i det nuvarande systemet.
- Implementeringen av POSIX à tkomstkontrollistor (POSIX ACL) har omarbetats. I den nya implementeringen har arkitekturella problem ÄtgÀrdats, kodunderhÄllet har förenklats och sÀkrare datatyper har anvÀnts.
- I fscrypt-systemet, som anvÀnds för transparent kryptering av filer och kataloger, har stöd för krypteringsalgoritmen SM4 (kinesisk standard GB/T 32907-2016) lagts till.
- Möjligheten att kompilera kÀrnan utan stöd för NFSv2 har tillhandahÄllits (i framtiden planeras stöd för NFSv2 att helt upphöra).
- Organisationen för Ätkomstkontroll av NVMe-enheter har Àndrats. Möjlighet till lÀsning och skrivning pÄ NVMe-enheten har givits om skrivprocessen har tillgÄng till en speciell enhetsfil (tidigare krÀvdes behörighet CAP_SYS_ADMIN för processen).
- Den paketdrivrutinen för CD/DVD har tagits bort, eftersom den ansÄgs obsolet 2016.
- Virtualisering och sÀkerhet
- En ny metod för skydd mot sÄrbarheten Retbleed i Intel- och AMD-CPU:er har implementerats, vilket anvÀnder spÄrning av anropsdjup och inte saktar ned prestandan lika mycket som den tidigare metoden mot Retbleed. För att aktivera det nya lÀget föreslÄs kommandoradsparametern för kÀrnan "retbleed=stuff".
- En hybridmekanism för att skydda exekveringsflödet av FineIBT har lagts till, som kombinerar anvÀndningen av hÄrdvaruinstruktioner frÄn Intel IBT (Indirect Branch Tracking) och programvaruskyddet kCFI (kernel Control Flow Integrity) för att blockera avvikelser i det normala exekveringsflödet orsakade av exploateringar som Àndrar funktioner som lagras i minnet. FineIBT tillÄter endast exekvering av indirekta grenar om det övergÄr till instruktionen ENDBR, som Àr placerad i början av funktionen. Dessutom genomförs, likt kCFI-mekanismen, hashkontroller som garanterar oförÀndrade pekare.
- BegrÀnsningar har lagts till för att blockera attacker som manipulerar genereringen av "oops"-tillstÄnd, efter vilka problematiska uppgifter avslutas och tillstÄndet ÄterstÀlls utan att systemets drift stoppar. Vid ett mycket stort antal ÄtgÀrder av "oops"-tillstÄnd kan det uppstÄ en överflödning av referensrÀknaren (refcount), vilket kan utnyttja sÄrbarheter som orsakas av dereferensiering av NULL-pekare. För att skydda mot sÄdana attacker har en grÀns för det maximala antalet "oops"-utlösningar lagts till kÀrnan, efter vilket kÀrnan kommer att initiera övergÄngen till "panic"-lÀge med efterföljande omstart, vilket förhindrar att antalet iterationer som krÀvs för att överflöda refcount nÄs. Som standard sÀtts grÀnsen till 10 000 "oops", men den kan Àndras via parameter oops_limit.
- En ny konfigurationsparameter LEGACY_TIOCSTI och sysctl legacy_tiocsti har lagts till för att inaktivera möjligheten att mata in data till terminalen via ioctl TIOCSTI, eftersom denna funktionalitet kan anvÀndas för att injicera godtyckliga tecken i terminalens inmatningsbuffer och simulera anvÀndarinmatning.
- En ny typ av interna strukturer, encoded_page, har föreslagits, dÀr de lÀgre bitarna av pekaren anvÀnds för att lagra ytterligare information som anvÀnds för att skydda mot oavsiktlig dereferering av pekaren (vid verkligt behov av dereferering mÄste dessa extra bitar först rensas).
- PÄ ARM64-plattformen har möjligheten att aktivera och inaktivera den programvaruimplementation av Shadow Stack-mekanismen som anvÀnds för att skydda mot överskrivning av returadressen frÄn en funktion vid stacköverskridning lagts till under bootsteget (syftet med skyddet Àr att efter att kontrollen överlÀmnats till funktionen spara returadressen i en separat "skugga"-stack och hÀmta denna adress innan man lÀmnar funktionen). Stöd för bÄde hÄrdvaru- och programvaruimplementation av Shadow Stack i en och samma kÀrnversion möjliggör anvÀndning av en kÀrna pÄ olika ARM-system, oavsett om de stöder instruktioner för pekarautentisering. Aktivering av programvaruimplementationen sker genom att underlÀtta nödvÀndiga instruktioner i koden under boot.
- Stödet för att anvÀnda mekanismen för asynkron utgÄende notifikation (asynchronous exit notification) pÄ Intel-processorer har lagts till, vilket gör det möjligt att upptÀcka single-step-attacker pÄ kod som körs i SGX-enklaver.
- Ett set av operationer har föreslagits för att hypervisorn ska kunna hantera förfrÄgningar frÄn Intel TDX (Trusted Domain Extensions) gÀstsystem.
- BygginstÀllningar för kÀrnan RANDOM_TRUST_BOOTLOADER och RANDOM_TRUST_CPU har tagits bort, istÀllet bör motsvarande alternativ i kommandoraden random.trust_bootloader och random.trust_cpu anvÀndas.
- I mekanismen Landlock, som begrÀnsar interaktionen mellan en grupp processer och omvÀrlden, har stödet för flaggan LANDLOCK_ACCESS_FS_TRUNCATE lagts till, vilket ger möjlighet att kontrollera utförandet av filtrunkeringsoperationer.
- NĂ€tverkssystemet
- För IPv6 har stöd för PLB (Protective Load Balancing) lagts till, en metod för att balansera belastningen mellan nÀtverkslÀnkar som syftar till att minska överbelastningspunkter pÄ datacenter-switchar. Genom att Àndra IPv6 Flow Label Àndrar PLB slumpmÀssigt paketvÀgar för att jÀmna ut belastningen pÄ switchportarna. För att minska paket omordning utförs denna operation, i möjligaste mÄn, efter perioder av inaktivitet. AnvÀndningen av PLB i Googles datacenter har möjliggjort en genomsnittlig minskning av obalans i belastning pÄ switchportarna med 60 %, en minskning av paketförlust med 33 % och en sÀnkning av fördröjningarna med 20 %.
- En drivrutin för MediaTek-enheter med stöd för Wi-Fi 7 (802.11be) har lagts till.
- Stöd för 800-gigabit lÀnkar har lagts till.
- Möjligheten att byta namn pÄ nÀtverksgrÀnssnitt i realtid, utan att stoppa verksamheten, har lagts till.
- I loggmeddelandena om SYN-floder har en hÀnvisning till IP-adressen som paketet kom till lagts till.
- För UDP har möjligheten att anvÀnda separata hash-tabeller för olika nÀtverksnamnutrymmen implementerats.
- För nÀtverksbroar har stöd för autentiseringsmetoden MAB (MAC Authentication Bypass) implementerats.
- För protokollet CAN (CAN_RAW) har stöd för socketlÀget SO_MARK implementerats för att koppla trafikfilter baserade pÄ fwmark.
- I ipset har en ny parameter bitmask implementerats, vilket gör det möjligt att stÀlla in en mask baserat pÄ godtyckliga bitar i IP-adressen (till exempel, "ipset create set1 hash:ip bitmask 255.128.255.0").
- I nf_tables har stöd för att behandla interna (inner) rubriker som kommer inuti inkapslade paket lagts till.
- Utrustning
- Ett system för "accel" har lagts till med en implementering av ett ramverk för berÀkningsacceleratorer, som kan levereras i form av separata ASIC:ar eller som IP-block inom SoC och GPU. Dessa acceleratorer Àr frÀmst inriktade pÄ att pÄskynda lösningen av maskininlÀrningsuppgifter.
- I amdgpu-drivrutinen har stöd för IP-komponenter GC, PSP, SMU och NBIO lagts till. För ARM64-system har stöd för DCN (Display Core Next) implementerats. Implementeringen av skyddad skÀrmutgÄng har överförts frÄn DCN10 till DCN21 och kan nu anvÀndas vid anslutning av flera skÀrmar.
- I drivrutinen i915 (Intel) har stödet för diskreta Intel Arc-grafikkort (DG2/Alchemist) stabiliserats.
- I Nouveau-drivrutinen har stöd för GPU NVIDIA GA102 (RTX 30) baserat pÄ arkitekturen Ampere implementerats. För korten nva3 (GT215) har möjligheten att styra bakgrundsbelysningen lagts till.
- Stöd för trÄdlösa adaptrar baserade pÄ Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) och MediaTek MT7996, Bluetooth-grÀnssnitt frÄn Broadcom BCM4377/4378/4387, samt Ethernet-kontroller Motorcomm yt8521, NVIDIA Tegra GE har lagts till.
- ASoC (ALSA System on Chip) stöd för inbyggda ljudchip HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588 har lagts till. Stöd för ljudgrÀnssnittet Focusrite Saffire Pro 40 har lagts till. Ljudkodaren Realtek RT1318 har lagts till.
- Stöd för smartphones och surfplattor frÄn Sony (Xperia 10 IV, 5 IV, X och X compact, OnePlus One, 3, 3T och Nord N100, Xiaomi Poco F1 och Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1) har lagts till.
- Stöd för ARM SoC och Apple T6000-plattor (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 har lagts till.
Samtidigt har Latinamerikanska stiftelsen för fri programvara skapat en helt fri kĂ€rnversion 6.2 â Linux-libre 6.2-gnu, rensad frĂ„n firmware- och drivrutinskomponenter som innehĂ„ller icke-fria komponenter eller kodavsnitt vars anvĂ€ndning Ă€r begrĂ€nsad av tillverkaren. I den nya utgĂ„van har nya blobbar i drivrutinen nouveau rensats. InlĂ€sning av blobbar i drivrutinerna mt7622, mt7996 wifi och bcm4377 bluetooth har inaktiverats. Namnen pĂ„ blobbar i dts-filer för Aarch64-arkitekturen har rensats. Koden för att rensa blobbar i olika drivrutiner och underystem har uppdaterats. Rensningen av drivrutinen s5k4ecgx har upphört, eftersom den har tagits bort frĂ„n kĂ€rnan.
KĂ€lla: opennet.ru
