Na het ontwikkelen van twee maanden heeft Linus Torvalds de release van de Linux-kernel 6.2 aangekondigd. De meest opvallende veranderingen zijn: de acceptatie van code onder de Copyleft-Next-licentie, een verbeterde implementatie van RAID5/6 in Btrfs, voortzetting van de integratie van ondersteuning voor de programmeertaal Rust, verlaagde overhead bij bescherming tegen Retbleed-aanvallen, een mogelijkheid om het geheugengebruik bij terugschrijven aan te passen, een TCP-mechanisme voor beschermend load balancing (PLB), een hybride mechanisme voor de bescherming van de uitvoering van instructies (FineIBT), de mogelijkheid om eigen objecten en datatypes te definiëren in BPF, de opname van de tool rv (Runtime Verification), en een verminderd energieverbruik in de implementatie van RCU-locks.
In de nieuwe versie zijn 16843 correcties van 2178 ontwikkelaars opgenomen, de patchgrootte bedraagt 62 MB (de wijzigingen beïnvloedden 14108 bestanden, 730195 regels code werden toegevoegd en 409485 regels verwijderd). Ongeveer 42% van alle wijzigingen in 6.2 heeft betrekking op apparaats drivers, ongeveer 16% van de wijzigingen betreft de update van hardware-architectuur-specifieke code, 12% heeft te maken met de netwerkstack, 4% met bestandssystemen en 3% met de interne subsysteem van de kernel.
Belangrijkste vernieuwingen in de kernel 6.2:
- Geheugen en systeemdiensten
- Het is toegestaan om code en wijzigingen die onder de Copyleft-Next 0.3.1-licentie worden geleverd, op te nemen in de kernel. De Copyleft-Next-licentie is ontworpen door een van de auteurs van GPLv3 en is volledig compatibel met de GPLv2-licentie, wat is bevestigd door juristen van SUSE en Red Hat. In vergelijking met GPLv2 is de Copyleft-Next-licentie aanzienlijk compacter en gemakkelijker te begrijpen (de inleiding en vermelding van verouderde compromissen zijn verwijderd), het definieert de termijnen en procedures voor het verhelpen van inbreuken, en heft automatisch de copyleft-eisen voor verouderde code die ouder is dan 15 jaar.
De Copyleft-Next-licentie bevat ook een clausule over het verlenen van rechten op gepatenteerde technologieën, waardoor deze licentie, in tegenstelling tot GPLv2, compatibel is met de Apache 2.0-licentie. Om volledige compatibiliteit met GPLv2 te waarborgen, staat in de tekst van Copyleft-Next expliciet dat afgeleide werken niet alleen onder de oorspronkelijke Copyleft-Next-licentie mogen worden geleverd, maar ook onder de GPL-licentie.
- De 'rv'-tool is opgenomen, die een interface biedt voor interactie vanuit de gebruikersruimte met de handlers van het RV (Runtime Verification)-subsyteem, bedoeld voor het verifiëren van de correcte werking van hoogbetrouwbare systemen die de afwezigheid van storingen garanderen. De controle vindt plaats tijdens runtime door handlers aan tracepunten te hechten, die de feitelijke uitvoering vergelijken met een vooraf gedefinieerd referentie-deterministisch model van de automaat, dat het verwachte gedrag van het systeem bepaalt.
- In het zRAM-apparaat, dat de mogelijkheid biedt om een swap-partitie in gecomprimeerde vorm in het geheugen op te slaan (in het geheugen wordt een blokapparaat gemaakt waarop met compressie geswapt wordt), is de mogelijkheid geïmplementeerd om pagina's opnieuw te verpakken met behulp van een alternatief algoritme voor een hoger compressieniveau. Het belangrijkste idee is om een keuze te bieden tussen meerdere algoritmen (lzo, lzo-rle, lz4, lz4hc, zstd), die hun eigen compromissen bieden tussen compressie-/decompressiesnelheid en compressieniveau of optimaal zijn in bepaalde situaties (bijvoorbeeld voor het comprimeren van grote geheugenspagina's).
- Er is een API 'iommufd' toegevoegd voor het beheren van het I/O memory management systeem — IOMMU (I/O Memory-Management Unit) vanuit de gebruikersruimte. De nieuwe API maakt het mogelijk om de pagina-tabellen van het I/O-geheugen te beheren met behulp van bestandsdescriptors.
- In BPF is de mogelijkheid toegevoegd om typen te creëren, eigen objecten te definiëren, een eigen hiërarchie van objecten op te bouwen en flexibele datatypes zoals gekoppelde lijsten te vormen. Voor BPF-programma's die in de slaapstand gaan (BPF_F_SLEEPABLE) is ondersteuning voor bpf_rcu_read_{,un}lock()-vergrendelingen toegevoegd. Ondersteuning voor het opslaan van task_struct-objecten is geïmplementeerd. Een map-type BPF_MAP_TYPE_CGRP_STORAGE is toegevoegd, dat lokale opslag voor cgroups biedt.
- Voor het RCU (Read-copy-update) vergrendelingsmechanisme is een optioneel mechanisme voor 'luie' callback-aanroepen geïmplementeerd, waarbij meerdere callback-aanroepen in batchmodus op tijdstippen worden verwerkt. Het toepassen van de voorgestelde optimalisatie maakt het mogelijk om het energieverbruik op Android- en ChromeOS-apparaten met 5-10% te verlagen door RCU-aanvragen uit te stellen tijdens stilstand of lage systeembelasting.
- De sysctl split_lock_mitigate is toegevoegd om de reactie van het systeem te regelen bij het detecteren van gesplitste locks ('split lock'), die optreden bij toegang tot niet-uitgelijnde gegevens in het geheugen, omdat bij het uitvoeren van een atomische instructie de gegevens twee cachelijnen van de CPU overschrijden. Dergelijke locks leiden tot aanzienlijke prestatieverlies. Bij het instellen van de waarde 0 voor split_lock_mitigate wordt alleen een waarschuwing gegeven over het probleem, en bij het instellen van de waarde 1 wordt naast de waarschuwing de uitvoering van het proces dat de lock veroorzaakte vertraagd om de prestaties van de rest van het systeem te behouden.
- Voor de PowerPC-architectuur is een nieuwe implementatie van qspinlock-locks voorgesteld, die hogere prestaties biedt en enkele problemen met locks in uitzonderlijke situaties oplost.
- De code voor de behandeling van MSI (Message-Signaled Interrupts) is herzien, waarbij bestaande architecturale problemen zijn opgelost en ondersteuning is toegevoegd voor het toewijzen van afzonderlijke handlers aan verschillende apparaten.
- Voor systemen op basis van de LoongArch instructieset, gebruikt in Loongson 3 5000-processors, die een nieuwe RISC ISA implementeren die lijkt op MIPS en RISC-V, is ondersteuning toegevoegd voor ftrace, stapelbescherming en slaap- en wachtmodi.
- Er is nu mogelijkheid om namen toe te wijzen aan gebieden van gedeeld anonieme geheugen (eerder konden namen alleen worden toegewezen aan privé anonieme geheugen dat aan een specifiek proces was gekoppeld).
- Een nieuwe kernel-commandoregelparameter 'trace_trigger' is toegevoegd, bedoeld om een traceertrigger te activeren, toegepast voor het maken van verbanden tussen voorwaardelijke commando's die worden aangeroepen bij het uitvoeren van een controle (bijvoorbeeld, trace_trigger='sched_switch.stacktrace if prev_state == 2').
- De vereisten voor de versie van het binutils-pakket zijn verhoogd. Voor het samenstellen van de kernel is nu ten minste binutils 2.25 vereist.
- Bij het aanroepen van exec() is de mogelijkheid toegevoegd om een proces in een tijdnamespace te plaatsen, waarin de tijd verschilt van de systeemtijd.
- De overdracht van extra functionaliteit uit de Rust-for-Linux tak is begonnen, met betrekking tot het gebruik van de Rust-taal als tweede taal voor de ontwikkeling van drivers en kernelmodules. Ondersteuning voor Rust is standaard inactief en leidt niet tot het opnemen van Rust in de verplichte buildafhankelijkheden van de kernel. De in de vorige release voorgestelde basisfunctionaliteit is uitgebreid met mogelijkheden ter ondersteuning van laag-niveau code, zoals het type Vec en de macro's pr_debug!(), pr_cont!() en pr_alert!(), evenals de procedurele macro ‘#[vtable]’, die het werken met functiepointertabellen vergemakkelijkt. De toevoeging van hoog-niveau Rust-wrappers bovenop de kernel-subsystemen, waarmee volledige drivers in Rust kunnen worden gemaakt, wordt verwacht in volgende releases.
- Het in de kernel gebruikte type ‘char’ is nu standaard voor alle architecturen gedefinieerd als ongetekend.
- Het SLOB (slab allocator) geheugenallocatiemechanisme is als verouderd verklaard, dat was ontworpen voor systemen met een beperkte hoeveelheid geheugen. In normale omstandigheden wordt aanbevolen om SLUB of SLAB te gebruiken in plaats van SLOB. Voor systemen met een beperkte hoeveelheid geheugen wordt aangeraden om SLUB te gebruiken in SLUB_TINY-modus.
- Het is toegestaan om code en wijzigingen die onder de Copyleft-Next 0.3.1-licentie worden geleverd, op te nemen in de kernel. De Copyleft-Next-licentie is ontworpen door een van de auteurs van GPLv3 en is volledig compatibel met de GPLv2-licentie, wat is bevestigd door juristen van SUSE en Red Hat. In vergelijking met GPLv2 is de Copyleft-Next-licentie aanzienlijk compacter en gemakkelijker te begrijpen (de inleiding en vermelding van verouderde compromissen zijn verwijderd), het definieert de termijnen en procedures voor het verhelpen van inbreuken, en heft automatisch de copyleft-eisen voor verouderde code die ouder is dan 15 jaar.
- Opslagsubsystemen, invoer/uitvoer en bestandssystemen
- In Btrfs zijn verbeteringen aangebracht, gericht op het oplossen van het ‘write hole’ probleem in de RAID 5/6 implementatie (een poging om RAID te herstellen als een crash plaatsvond tijdens het schrijven en het niet mogelijk is te begrijpen welk blok op welk RAID-apparaat correct is geschreven, wat kan leiden tot het vernietigen van blokken die overeenkomen met niet-geschreven blokken). Bovendien wordt voor SSD's nu, indien mogelijk, standaard automatisch de asynchrone uitvoering van de ‘discard’ operatie geactiveerd, wat een hogere prestaties mogelijk maakt door efficiënte groepering van ‘discard’ operaties in de wachtrij en verwerking door de achtergrondprocessors. De prestaties van send en lseek operaties zijn verhoogd, evenals ioctl FIEMAP.
- De mogelijkheden voor het beheer van uitgestelde gegevensopslag (writeback, achtergrondopslag van gewijzigde data) voor blokapparaten zijn uitgebreid. In sommige situaties, zoals bij het gebruik van netwerkblokapparaten of USB-sticks, kan uitgestelde opslag leiden tot een hoog geheugenverbruik. Om het gedrag van de uitgestelde opslag te beheren en de grootte van de paginacache binnen bepaalde grenzen te houden in sysfs (\/sys\/class\/bdi\/) zijn nieuwe parameters strict_limit, min_bytes, max_bytes, min_ratio_fine en max_ratio_fine voorgesteld.
- In het bestandssysteem F2FS is een ioctl-operatie voor atomair vervangen geïmplementeerd, waarmee data in een bestand kan worden geschreven binnen één atomische operatie. In F2FS is ook een blokcache voor extensies toegevoegd, die helpt om actief gebruikte data of data die lang niet is geraadpleegd te identificeren.
- In het FS ext4 is alleen een foutoplossing gemeld.
- In het bestandssysteem ntfs3 zijn verschillende nieuwe mountopties voorgesteld: "nocase" voor het beheren van het gevalsonderscheid in bestands- en mapnamen; windows_name om het creëren van bestandsnamen met symbolen die niet toegestaan zijn voor het OS Windows te verbieden; hide_dot_files voor het beheren van het toekennen van het label voor verborgen bestanden aan bestanden die beginnen met een punt.
- In het bestandssysteem Squashfs is de mountoptie "threads=" geïmplementeerd, waarmee het aantal threads kan worden vastgesteld voor het paralleliseren van uitpakoperaties. In Squashfs is ook de mogelijkheid toegevoegd om gebruikersidentificaties van aangekoppelde bestandssystemen te mappen, wat wordt toegepast om bestanden van een bepaalde gebruiker op een aangekoppeld vreemde partitie te koppelen aan een andere gebruiker in het huidige systeem.
- De implementatie van POSIX-toegangscontrolelijsten (POSIX ACL) is herzien. In de nieuwe implementatie zijn architectonische problemen verholpen, is het onderhoud van de codebasis vereenvoudigd en zijn veiligere datatypes ingezet.
- In de fscrypt-subsysteem, die wordt gebruikt voor transparante versleuteling van bestanden en mappen, is ondersteuning voor het versleutelingsalgoritme SM4 (Chinees standaard GB\/T 32907-2016) toegevoegd.
- Er is de mogelijkheid geboden om de kernel te bouwen zonder ondersteuning voor NFSv2 (in de toekomst is het plan om de ondersteuning voor NFSv2 volledig stop te zetten).
- De organisatie van de toegang tot NVMe-apparaten is gewijzigd. Lezen en schrijven naar een NVMe-apparaat is nu mogelijk als het schrijfproces toegang heeft tot een specifiek apparaatbestand (voorheen moest het proces over de CAP_SYS_ADMIN-privileges beschikken).
- De batchdriver voor CD/DVD is verwijderd, omdat deze in 2016 verouderd is verklaard.
- Virtualisatie en beveiliging
- Een nieuwe methode voor bescherming tegen de Retbleed-kwetsbaarheid in Intel- en AMD-CPU's is geïmplementeerd, die het volgen van de diepte van aanroepen gebruikt en die minder vertraging veroorzaakt dan de eerdere bescherming tegen Retbleed. Voor het inschakelen van de nieuwe modus is de kernel-commandooptie "retbleed=stuff" voorgesteld.
- Een hybride mechanisme voor bescherming van de uitvoeringsstroom van opdrachten, FineIBT, is toegevoegd, dat gebruikmaakt van Intel IBT (Indirect Branch Tracking) hardware-instructies en softwarebescherming kCFI (kernel Control Flow Integrity) om verstoringen van de normale uitvoeringsvolgorde (control flow) door exploits die geheugenfunctiewijzers wijzigen, te blokkeren. FineIBT staat uitvoeringen via indirecte overgangen alleen toe als er een overgang plaatsvindt naar de instructie ENDBR, die aan het begin van de functie is geplaatst. Daarnaast wordt, vergelijkbaar met het kCFI-mechanisme, een hash-controle uitgevoerd die de ongewijzigdheid van de wijzers garandeert.
- Beperkingen zijn toegevoegd om aanvallen te blokkeren die de generatie van 'oops'-toestanden manipuleren, waardoor problematische taken worden beëindigd en de toestand wordt hersteld zonder dat het systeem stopt. Bij een zeer groot aantal 'oops'-toestanden ontstaat er een overflow van de referentieteller (refcount), waardoor kwetsbaarheden door het dereferenceren van NULL-wijzers kunnen worden geëxploiteerd. Ter bescherming tegen dergelijke aanvallen is er een limiet in de kernel toegevoegd voor het maximale aantal 'oops'-activaties, waarna de kernel een overgang naar de 'panic'-toestand zal initiëren met daaropvolgende herstart, waardoor het aantal iteraties dat nodig is voor een referentietelleroverflow niet kan worden bereikt. standaard is de limiet ingesteld op 10.000 'oops', maar deze kan indien gewenst worden gewijzigd via de parameter oops_limit.
- De configuratieparameter LEGACY_TIOCSTI en sysctl legacy_tiocsti zijn toegevoegd om de mogelijkheid uit te schakelen om gegevens in de terminal in te voeren via ioctl TIOCSTI, aangezien deze functionaliteit kan worden gebruikt om willekeurige karakters in de invoerbuffer van de terminal in te voegen en de gebruiker invoer te simuleren.
- Een nieuw type interne structuren, encoded_page, is voorgesteld, waarbij de onderste bits van de pointer worden gebruikt om aanvullende informatie op te slaan die wordt gebruikt om te beschermen tegen ongewenst derefereren van de pointer (indien derefereren echt nodig is, moeten deze aanvullende bits eerst worden leeggemaakt).
- Op het ARM64-platform is tijdens de opstartfase de mogelijkheid geboden om de software-implementatie van het Shadow Stack-mechanisme in en uit te schakelen, wat wordt gebruikt om te beschermen tegen het overschrijven van het retouradres uit een functie in het geval van een buffer-overflow (de essentie van de bescherming is het opslaan van het retouradres in een aparte "schaduw"-stack na het overdragen van de controle aan de functie en het extraheren van dit adres voordat de functie verlaat). Ondersteuning voor zowel hardware- als software-implementaties van Shadow Stack in dezelfde kernelbuild maakt het mogelijk om één kernel op verschillende ARM-systemen te gebruiken, ongeacht de ondersteuning voor instructies voor pointer-authenticatie. De inschakeling van de software-implementatie gebeurt door tijdens de opstart de noodzakelijke instructies in de code te vervangen.
- Ondersteuning is toegevoegd voor het gebruik van de asynchrone exit notification-mechanisme op Intel-processors, waarmee single-step aanvallen op code die in SGX-enclaves wordt uitgevoerd, kunnen worden gedetecteerd.
- Een set operaties is voorgesteld die de hypervisor in staat stelt om verzoeken van gastsystemen Intel TDX (Trusted Domain Extensions) te ondersteunen.
- De kernel build-instellingen RANDOM_TRUST_BOOTLOADER en RANDOM_TRUST_CPU zijn verwijderd, waarvoor nu de overeenkomstige opstartparameters random.trust_bootloader en random.trust_cpu moeten worden gebruikt.
- In het Landlock-mechanisme, dat de interactie van een groep processen met de externe omgeving beperkt, is ondersteuning voor de vlag LANDLOCK_ACCESS_FS_TRUNCATE toegevoegd, die de mogelijkheid biedt om de uitvoering van bestandsafkortingsbewerkingen te controleren.
- Netwerk subsysteem
- Voor IPv6 is ondersteuning voor PLB (Protective Load Balancing) toegevoegd, een mechanisme voor lastbalancering tussen netwerklijnen, gericht op het verminderen van belastingpunten op datacenter-switches. Door het veranderen van het IPv6 Flow Label, wijzigt PLB willekeurig de paden van pakketten om de belasting op de switchpoorten te balanceren. Om het herschikken van pakketten te verminderen, wordt deze bewerking waar mogelijk uitgevoerd na stilstandsperiodes (idle). Het gebruik van PLB in Google-datacenters heeft geleid tot een gemiddelde vermindering van de belastingongelijkheid op switchpoorten met 60%, een vermindering van pakketverlies met 33% en een vertraging van 20%.
- Er is een stuurprogramma toegevoegd voor MediaTek-apparaten met ondersteuning voor Wi-Fi 7 (802.11be).
- Ondersteuning voor 800-gigabit verbindingen is toegevoegd.
- De mogelijkheid om netwerkinterfaces on-the-fly te hernoemen, zonder de werking te stoppen, is toegevoegd.
- In de logboekberichten over SYN-flood is een vermelding toegevoegd van het IP-adres waar het pakket vandaan kwam.
- Voor UDP is de mogelijkheid geïmplementeerd om aparte hash-tabellen te gebruiken voor verschillende netwerknaamruimten.
- Voor netwerkbruggen is ondersteuning voor de authenticatiemethode MAB (MAC Authentication Bypass) geïmplementeerd.
- Voor het CAN-protocol (CAN_RAW) is ondersteuning voor de socketmodus SO_MARK geïmplementeerd voor het aanhechten van verkeersfilters op basis van fwmark.
- In ipset is een nieuwe parameter bitmask geïmplementeerd, waarmee een masker kan worden ingesteld op basis van willekeurige bits in een IP-adres (bijvoorbeeld, 'ipset create set1 hash:ip bitmask 255.128.255.0').
- In nf_tables is ondersteuning toegevoegd voor het verwerken van interne (inner) headers die binnen getunnelde pakketten komen.
- Apparatuur
- Een subsystem 'accel' is toegevoegd met de implementatie van een raamwerk voor rekensnelheden, die zowel als afzonderlijke ASIC als in de vorm van IP-blokken binnen SoC en GPU kunnen worden geleverd. Deze versnellers zijn voornamelijk gericht op het versnellen van machine learning-taken.
- In de amdgpu-driver is ondersteuning ingeschakeld voor IP-componenten GC, PSP, SMU en NBIO. Voor ARM64-systemen is ondersteuning voor DCN (Display Core Next) geïmplementeerd. De implementatie van veilige weergave op het scherm is overgezet van DCN10 naar DCN21 en kan nu worden gebruikt bij het aansluiten van meerdere schermen.
- In de i915-driver (Intel) is de ondersteuning voor discrete Intel Arc (DG2/Alchemist) grafische kaarten gestabiliseerd.
- In de Nouveau-driver is ondersteuning geïmplementeerd voor de NVIDIA GA102 (RTX 30) GPU op basis van de Ampere-architectuur. Voor nva3 (GT215) kaarten is de mogelijkheid van achtergrondverlichting toegevoegd.
- Ondersteuning voor draadloze adapters op basis van Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) en MediaTek MT7996, Bluetooth-interfaces van Broadcom BCM4377/4378/4387, evenals Ethernet-controllers van Motorcomm yt8521, NVIDIA Tegra GE toegevoegd.
- Ondersteuning voor ASoC (ALSA System on Chip) voor ingebouwde audiotchips van HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588 toegevoegd. Ondersteuning voor de audiinterface Focusrite Saffire Pro 40 toegevoegd. Audiocodec Realtek RT1318 toegevoegd.
- Ondersteuning voor smartphones en tablets van Sony (Xperia 10 IV, 5 IV, X en X compact, OnePlus One, 3, 3T en Nord N100, Xiaomi Poco F1 en Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1 toegevoegd.
- Ondersteuning voor ARM SoC en Apple-borden 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 toegevoegd.
Tegelijkertijd heeft de Latijns-Amerikaanse Free Software Foundation een volledig vrij kernelalternatief 6.2 - Linux-libre 6.2-gnu gepresenteerd, gereinigd van elementen van firmwares en stuurprogramma's die niet-vrije componenten of codefragmenten bevatten, waarvan de toepassing beperkt is door de fabrikant. In deze nieuwe uitgave zijn nieuwe blobs in de nouveau-stuurprogramma gereinigd. Het laden van blobs in de stuurprogramma's mt7622, mt7996 wifi en bcm4377 bluetooth is uitgeschakeld. De namen van blobs in dts-bestanden voor de Aarch64-architectuur zijn gereinigd. De code voor het reinigen van blobs in verschillende stuurprogramma's en subsystemen is bijgewerkt. Het reinigen van de driver s5k4ecgx is stopgezet, omdat deze uit de kernel is verwijderd.
Bron: opennet.ru
