Linux 6.2 kernel-release

Na twee maanden ontwikkeling presenteerde Linus Torvalds de release van de Linux-kernel 6.2. Een van de meest opvallende veranderingen: acceptatie van code onder de Copyleft-Next-licentie is toegestaan, de implementatie van RAID5/6 in Btrfs is verbeterd, de integratie van ondersteuning voor de Rust-taal gaat door, de overhead van bescherming tegen Retbleed-aanvallen is verminderd, de de mogelijkheid om het geheugenverbruik tijdens het terugschrijven te reguleren is toegevoegd, er is een mechanisme toegevoegd voor TCP-balancering PLB (Protective Load Balancing), een hybride commandostroombeschermingsmechanisme (FineIBT) is toegevoegd, BPF heeft nu de mogelijkheid om zijn eigen objecten en datastructuren te definiëren , het hulpprogramma rv (Runtime Verification) is inbegrepen, het stroomverbruik bij de implementatie van RCU-sloten is verminderd.

De nieuwe versie bevat 16843 reparaties van 2178 ontwikkelaars, de patchgrootte is 62 MB (de wijzigingen betroffen 14108 bestanden, 730195 regels code zijn toegevoegd en 409485 regels zijn verwijderd). Ongeveer 42% van alle wijzigingen die in 6.2 zijn geïntroduceerd, hebben betrekking op apparaatstuurprogramma's, ongeveer 16% van de wijzigingen heeft betrekking op het updaten van code die specifiek is voor hardware-architecturen, 12% heeft betrekking op de netwerkstack, 4% heeft betrekking op bestandssystemen en 3% zijn gerelateerd aan interne kernelsubsystemen.

Belangrijkste innovaties in kernel 6.2:

  • Geheugen- en systeemservices
    • Het is toegestaan ​​om in de kernelcode en wijzigingen op te nemen die worden geleverd onder de Copyleft-Next 0.3.1-licentie. De Copyleft-Next-licentie is gemaakt door een van de auteurs van GPLv3 en is volledig compatibel met de GPLv2-licentie, zoals bevestigd door advocaten van SUSE en Red Hat. Vergeleken met GPLv2 is de Copyleft-Next-licentie veel compacter en gemakkelijker te begrijpen (het inleidende gedeelte en de vermelding van verouderde compromissen zijn verwijderd), definieert het tijdsbestek en de procedure voor het elimineren van overtredingen, en verwijdert automatisch de copyleft-vereisten voor verouderde software die ouder is dan 15 jaar.

      Copyleft-Next bevat ook een clausule voor het verlenen van eigen technologie, die, in tegenstelling tot GPLv2, deze licentie compatibel maakt met de Apache 2.0-licentie. Om volledige compatibiliteit met GPLv2 te garanderen, vermeldt Copyleft-Next expliciet dat een afgeleid werk kan worden geleverd onder de GPL-licentie naast de originele Copyleft-Next-licentie.

    • De structuur omvat het hulpprogramma “rv”, dat een interface biedt voor interactie vanuit de gebruikersruimte met handlers van het RV-subsysteem (Runtime Verification), ontworpen om de juiste werking te controleren op zeer betrouwbare systemen die de afwezigheid van storingen garanderen. Verificatie wordt tijdens runtime uitgevoerd door handlers aan traceerpunten te koppelen die de feitelijke voortgang van de uitvoering controleren aan de hand van een vooraf bepaald referentiedeterministisch model van de machine dat het verwachte gedrag van het systeem definieert.
    • Het zRAM-apparaat, waarmee de swappartitie in gecomprimeerde vorm in het geheugen kan worden opgeslagen (er wordt een blokapparaat in het geheugen gemaakt waarop het swappen met compressie wordt uitgevoerd), implementeert de mogelijkheid om pagina's opnieuw in te pakken met behulp van een alternatief algoritme om een ​​hoger niveau te bereiken van compressie. Het hoofdidee is om een ​​keuze te bieden tussen verschillende algoritmen (lzo, lzo-rle, lz4, lz4hc, zstd), die hun eigen compromissen bieden tussen compressie-/decompressiesnelheid en compressieniveau, of optimaal in speciale situaties (bijvoorbeeld voor het comprimeren van grote geheugenpagina's).
    • De "iommufd" API toegevoegd voor het beheren van het I/O-geheugenbeheersysteem - IOMMU (I/O Memory-Management Unit) vanuit de gebruikersruimte. De nieuwe API maakt het mogelijk om I/O-geheugenpaginatabellen te beheren met behulp van bestandsdescriptors.
    • BPF biedt de mogelijkheid om typen te creëren, uw eigen objecten te definiëren, uw eigen hiërarchie van objecten op te bouwen en op flexibele wijze uw eigen datastructuren te creëren, zoals gekoppelde lijsten. Voor BPF-programma's die in de slaapmodus gaan (BPF_F_SLEEPABLE), is ondersteuning voor bpf_rcu_read_{,un}lock() vergrendelingen toegevoegd. Ondersteuning geïmplementeerd voor het opslaan van task_struct-objecten. Kaarttype BPF_MAP_TYPE_CGRP_STORAGE toegevoegd, dat lokale opslag biedt voor cgroups.
    • Voor het RCU-blokkeermechanisme (Read-copy-update) is een optioneel mechanisme van “luie” terugbeloproepen geïmplementeerd, waarbij meerdere terugbeloproepen tegelijk worden verwerkt met behulp van een timer in batchmodus. Door de voorgestelde optimalisatie toe te passen, kunnen we het energieverbruik op Android- en ChromeOS-apparaten met 5-10% verminderen door RCU-verzoeken uit te stellen tijdens inactieve tijden of bij lage belasting van het systeem.
    • Sysctl split_lock_mitigate toegevoegd om te bepalen hoe het systeem reageert wanneer het split locks detecteert die optreden bij het benaderen van niet-uitgelijnde gegevens in het geheugen doordat de gegevens twee CPU-cachelijnen overschrijden bij het uitvoeren van een atomaire instructie. Dergelijke blokkades leiden tot een aanzienlijke prestatievermindering. Het instellen van split_lock_mitigate op 0 geeft alleen een waarschuwing dat er een probleem is, terwijl het instellen van split_lock_mitigate op 1 er ook voor zorgt dat het proces dat ervoor zorgde dat de vergrendeling werd vertraagd om de prestaties voor de rest van het systeem te behouden.
    • Er is een nieuwe implementatie van qspinlock voorgesteld voor de PowerPC-architectuur, die hogere prestaties laat zien en enkele vergrendelingsproblemen oplost die zich in uitzonderlijke gevallen voordoen.
    • De MSI (Message-Signaled Interrupts) interruptafhandelingscode is herwerkt, waardoor geaccumuleerde architectonische problemen zijn geëlimineerd en ondersteuning is toegevoegd voor het binden van individuele handlers aan verschillende apparaten.
    • Voor systemen gebaseerd op de LoongArch-instructiesetarchitectuur die wordt gebruikt in de Loongson 3 5000-processors en die de nieuwe RISC ISA implementeren, vergelijkbaar met MIPS en RISC-V, is ondersteuning voor ftrace, stackbescherming, slaap- en standby-modi geïmplementeerd.
    • Er is voorzien in de mogelijkheid om namen toe te wijzen aan gebieden van gedeeld anoniem geheugen (voorheen konden namen alleen worden toegewezen aan privé anoniem geheugen dat aan een specifiek proces was toegewezen).
    • Een nieuwe kernel-opdrachtregelparameter “trace_trigger” toegevoegd, ontworpen om een ​​trace-trigger te activeren die wordt gebruikt om voorwaardelijke opdrachten te binden die worden opgeroepen wanneer een controlecontrole wordt geactiveerd (bijvoorbeeld trace_trigger=”sched_switch.stacktrace if prev_state == 2″).
    • De vereisten voor de versie van het binutils-pakket zijn verhoogd. Voor het bouwen van de kernel is nu minimaal binutils 2.25 vereist.
    • Bij het aanroepen van exec() is de mogelijkheid toegevoegd om een ​​proces in een tijdnaamruimte te plaatsen, waarbij de tijd verschilt van de systeemtijd.
    • We zijn begonnen met het overbrengen van extra functionaliteit van de Rust-voor-Linux-tak met betrekking tot het gebruik van de Rust-taal als tweede taal voor het ontwikkelen van stuurprogramma's en kernelmodules. Rust-ondersteuning is standaard uitgeschakeld en heeft niet tot gevolg dat Rust wordt opgenomen als een vereiste kernelbuild-afhankelijkheid. De basisfunctionaliteit die in de laatste release wordt aangeboden, is uitgebreid om code op laag niveau te ondersteunen, zoals het Vec-type en de macro's pr_debug!(), pr_cont!() en pr_alert!(), evenals de procedurele macro “#[vtable ]”, wat het werken met pointertabellen op functies vereenvoudigt. De toevoeging van Rust-bindingen op hoog niveau over kernelsubsystemen, waardoor volwaardige stuurprogramma's in Rust kunnen worden gemaakt, wordt in toekomstige releases verwacht.
    • Het "char"-type dat in de kernel wordt gebruikt, wordt nu standaard voor alle architecturen niet-ondertekend verklaard.
    • Het slab-geheugentoewijzingsmechanisme - SLOB (slab-allocator), dat is ontworpen voor systemen met een kleine hoeveelheid geheugen, is verouderd verklaard. In plaats van SLOB wordt onder normale omstandigheden aanbevolen om SLUB of SLAB te gebruiken. Voor systemen met een kleine hoeveelheid geheugen wordt aanbevolen SLUB in de SLUB_TINY-modus te gebruiken.
  • Schijfsubsysteem, I/O en bestandssystemen
    • Er zijn verbeteringen aangebracht aan Btrfs gericht op het oplossen van het ‘schrijfgat’-probleem in RAID 5/6-implementaties (een poging om een ​​RAID te herstellen als er een crash optreedt tijdens het schrijven en het onmogelijk is om te begrijpen op welk blok op welk RAID-apparaat correct is geschreven. wat kan leiden tot blokvernietiging, overeenkomend met onderschreven blokken). Bovendien maken SSD's indien mogelijk automatisch asynchrone verwijderingsbewerkingen mogelijk, waardoor betere prestaties mogelijk zijn dankzij de efficiënte groepering van verwijderingsbewerkingen in wachtrijen en verwerking van de wachtrij door een achtergrondprocessor. Verbeterde prestaties van de verzend- en lseek-bewerkingen, evenals de FIEMAP ioctl.
    • De mogelijkheden voor het beheren van uitgesteld schrijven (terugschrijven, opslaan op de achtergrond van gewijzigde gegevens) voor blokapparaten zijn uitgebreid. In sommige situaties, zoals bij het gebruik van netwerkblokapparaten of USB-drives, kunnen luie schrijfbewerkingen resulteren in een groot RAM-verbruik. Om het gedrag van lazy writes te controleren en de paginacachegrootte binnen bepaalde limieten te houden, zijn nieuwe parameters strict_limit, min_bytes, max_bytes, min_ratio_fine en max_ratio_fine geïntroduceerd in sysfs (/sys/class/bdi/).
    • Het F2FS-bestandssysteem implementeert een atomaire ioctl-vervangingsbewerking, waarmee u gegevens naar een bestand kunt schrijven binnen één atomaire bewerking. F2FS voegt ook een cache voor blokuitbreiding toe om actief gebruikte gegevens of gegevens die lange tijd niet zijn gebruikt, te helpen identificeren.
    • In de ext4 FS worden alleen foutcorrecties genoteerd.
    • Het ntfs3-bestandssysteem biedt verschillende nieuwe mount-opties: “nocase” om de hoofdlettergevoeligheid in bestands- en mapnamen te controleren; windows_name om het aanmaken van bestandsnamen te verbieden die tekens bevatten die niet geldig zijn voor Windows; hide_dot_files om de toewijzing van het verborgen bestandslabel te beheren voor bestanden die beginnen met een punt.
    • Het Squashfs-bestandssysteem implementeert een “threads=” mount-optie, waarmee u het aantal threads kunt definiëren om decompressiebewerkingen parallel te laten verlopen. Squashfs introduceerde ook de mogelijkheid om gebruikers-ID's van aangekoppelde bestandssystemen in kaart te brengen, die worden gebruikt om de bestanden van een specifieke gebruiker op een aangekoppelde buitenlandse partitie te matchen met een andere gebruiker op het huidige systeem.
    • De implementatie van POSIX-toegangscontrolelijsten (POSIX ACL's) is herwerkt. De nieuwe implementatie elimineert architecturale problemen, vereenvoudigt het onderhoud van de codebase en introduceert veiligere gegevenstypen.
    • Het fscrypt-subsysteem, dat wordt gebruikt voor transparante versleuteling van bestanden en mappen, heeft ondersteuning toegevoegd voor het SM4-versleutelingsalgoritme (Chinese standaard GB/T 32907-2016).
    • Er is voorzien in de mogelijkheid om de kernel te bouwen zonder NFSv2-ondersteuning (in de toekomst zijn ze van plan om de ondersteuning van NFSv2 volledig te stoppen).
    • De organisatie van het controleren van toegangsrechten tot NVMe-apparaten is gewijzigd. Biedt de mogelijkheid om te lezen en te schrijven naar een NVMe-apparaat als het schrijfproces toegang heeft tot het speciale bestand van het apparaat (voorheen moest het proces de machtiging CAP_SYS_ADMIN hebben).
    • Het cd-/dvd-pakketstuurprogramma verwijderd, dat in 2016 verouderd was.
  • Virtualisatie en beveiliging
    • Er is een nieuwe beschermingsmethode tegen de Retbleed-kwetsbaarheid geïmplementeerd in Intel- en AMD-CPU's, waarbij gebruik wordt gemaakt van call depth tracking, wat het werk niet zo veel vertraagt ​​als de eerder aanwezige bescherming tegen Retbleed. Om de nieuwe modus mogelijk te maken, is de kernelopdrachtregelparameter “rebleed=stuff” voorgesteld.
    • Een hybride FineIBT-instructiestroombeschermingsmechanisme toegevoegd, dat het gebruik van hardware Intel IBT-instructies (Indirect Branch Tracking) en softwarebescherming kCFI (kernel Control Flow Integrity) combineert om schending van de normale uitvoeringsvolgorde (control flow) als gevolg van het gebruik te blokkeren van exploits die pointers wijzigen die in het geheugen van functies zijn opgeslagen. FineIBT staat uitvoering door indirecte sprong alleen toe in het geval van een sprong naar de ENDBR-instructie, die helemaal aan het begin van de functie is geplaatst. Bovendien worden vervolgens, naar analogie met het kCFI-mechanisme, hashes gecontroleerd om de onveranderlijkheid van pointers te garanderen.
    • Er zijn beperkingen toegevoegd om aanvallen te blokkeren die het genereren van "oeps"-toestanden manipuleren, waarna problematische taken worden voltooid en de toestand wordt hersteld zonder het systeem te stoppen. Bij een zeer groot aantal aanroepen naar de "oeps"-status treedt een referentieteller-overflow op (refcount), waardoor misbruik kan worden gemaakt van kwetsbaarheden die worden veroorzaakt door NULL pointer-dereferenties. Om zich tegen dergelijke aanvallen te beschermen, is er een limiet aan de kernel toegevoegd voor het maximale aantal “oeps”-triggers. Bij overschrijding hiervan zal de kernel een overgang naar de “paniek”-status initiëren, gevolgd door een herstart, waardoor het niet mogelijk zal zijn om de aantal iteraties dat nodig is om de hertelling te overlopen. Standaard is de limiet ingesteld op 10 “oops”, maar indien gewenst kan deze worden gewijzigd via de parameter oops_limit.
    • Configuratieparameter LEGACY_TIOCSTI en sysctl legacy_tiocsti toegevoegd om de mogelijkheid uit te schakelen om gegevens in de terminal te plaatsen met behulp van de ioctl TIOCSTI, aangezien deze functionaliteit kan worden gebruikt om willekeurige tekens in de terminalinvoerbuffer te vervangen en gebruikersinvoer te simuleren.
    • Er wordt een nieuw type interne structuur voorgesteld, encoded_page, waarin de lagere bits van de pointer worden gebruikt om aanvullende informatie op te slaan die wordt gebruikt om te beschermen tegen onbedoelde dereferentie van de pointer (als dereferentie daadwerkelijk nodig is, moeten deze extra bits eerst worden gewist) .
    • Op het ARM64-platform is het in de opstartfase mogelijk om de software-implementatie van het Shadow Stack-mechanisme in of uit te schakelen, dat wordt gebruikt om te beschermen tegen het overschrijven van het retouradres van een functie in het geval van een bufferoverflow op de stapel ( de essentie van de bescherming is om het retouradres op te slaan in een aparte “schaduwstapel” nadat de besturing is overgedragen naar de functie en het opgegeven adres op te halen voordat de functie wordt verlaten). Ondersteuning voor hardware- en software-implementaties van Shadow Stack in één kernelassemblage stelt u in staat één kernel op verschillende ARM-systemen te gebruiken, ongeacht hun ondersteuning voor instructies voor pointer-authenticatie. Het opnemen van een software-implementatie wordt uitgevoerd door de noodzakelijke instructies in de code te vervangen tijdens het laden.
    • Ondersteuning toegevoegd voor het gebruik van het asynchrone exit-meldingsmechanisme op Intel-processors, waarmee aanvallen in één stap kunnen worden gedetecteerd op code die wordt uitgevoerd in SGX-enclaves.
    • Er wordt een reeks bewerkingen voorgesteld waarmee de hypervisor verzoeken van Intel TDX-gastsystemen (Trusted Domain Extensions) kan ondersteunen.
    • De kernelbuildinstellingen RANDOM_TRUST_BOOTLOADER en RANDOM_TRUST_CPU zijn verwijderd ten gunste van de corresponderende opdrachtregelopties random.trust_bootloader en random.trust_cpu.
    • Het Landlock-mechanisme, waarmee u de interactie van een groep processen met de externe omgeving kunt beperken, heeft ondersteuning toegevoegd voor de vlag LANDLOCK_ACCESS_FS_TRUNCATE, die het mogelijk maakt om de uitvoering van bestandsafkappingsbewerkingen te controleren.
  • Netwerksubsysteem
    • Voor IPv6 is ondersteuning voor PLB (Protective Load Balancing) toegevoegd, een load-balancing-mechanisme tussen netwerkverbindingen gericht op het verminderen van overbelastingspunten op datacenterswitches. Door het IPv6-stroomlabel te wijzigen, verandert de PLB willekeurig pakketpaden om de belasting op switchpoorten te verdelen. Om het opnieuw ordenen van pakketten te verminderen, wordt deze bewerking waar mogelijk uitgevoerd na perioden van inactiviteit. Het gebruik van PLB in de datacenters van Google heeft de onbalans in de belasting op switchpoorten met gemiddeld 60% verminderd, het pakketverlies met 33% verminderd en de latentie met 20% verminderd.
    • Stuurprogramma toegevoegd voor MediaTek-apparaten die Wi-Fi 7 (802.11be) ondersteunen.
    • Ondersteuning toegevoegd voor 800-gigabit-koppelingen.
    • De mogelijkheid toegevoegd om netwerkinterfaces direct te hernoemen, zonder het werk te onderbreken.
    • Een vermelding van het IP-adres waarop het pakket is aangekomen, is toegevoegd aan de logberichten over SYN flood.
    • Voor UDP is de mogelijkheid geïmplementeerd om afzonderlijke hashtabellen te gebruiken voor verschillende netwerknaamruimten.
    • Voor netwerkbruggen is ondersteuning voor de MAB-authenticatiemethode (MAC Authentication Bypass) geïmplementeerd.
    • Voor het CAN-protocol (CAN_RAW) is ondersteuning voor de SO_MARK-socketmodus geïmplementeerd voor het koppelen van op fwmark gebaseerde verkeersfilters.
    • ipset implementeert een nieuwe bitmask-parameter waarmee u een masker kunt instellen op basis van willekeurige bits in het IP-adres (bijvoorbeeld "ipset create set1 hash:ip bitmask 255.128.255.0").
    • Ondersteuning toegevoegd voor het verwerken van interne headers in getunnelde pakketten naar nf_tables.
  • Uitrusting
    • Het ‘accel’-subsysteem is toegevoegd met de implementatie van een raamwerk voor rekenversnellers, dat kan worden geleverd in de vorm van individuele ASIC’s of in de vorm van IP-blokken binnen de SoC en GPU. Deze accelerators zijn vooral gericht op het versnellen van de oplossing van machine learning-problemen.
    • Het amdgpu-stuurprogramma biedt ondersteuning voor de GC-, PSP-, SMU- en NBIO IP-componenten. Voor ARM64-systemen is ondersteuning voor DCN (Display Core Next) geïmplementeerd. De implementatie van beveiligde schermuitvoer is verplaatst van het gebruik van DCN10 naar DCN21 en kan nu worden gebruikt bij het aansluiten van meerdere schermen.
    • De i915 (Intel) driver heeft de ondersteuning voor afzonderlijke Intel Arc (DG2/Alchemist) videokaarten gestabiliseerd.
    • De Nouveau-driver ondersteunt NVIDIA GA102 (RTX 30) GPU's op basis van de Ampere-architectuur. Voor nva3 (GT215)-kaarten is de mogelijkheid toegevoegd om de achtergrondverlichting te regelen.
    • Ondersteuning toegevoegd voor draadloze adapters op basis van Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) en MediaTek MT7996-chips, Broadcom BCM4377/4378/4387 Bluetooth-interfaces, evenals Motorcomm yt8521 en NVIDIA Tegra GE Ethernet-controllers.
    • ASoC (ALSA System on Chip)-ondersteuning toegevoegd voor ingebouwde geluidschips HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. Ondersteuning toegevoegd voor de audio-interface Focusrite Saffire Pro 40. Realtek RT1318 audiocodec toegevoegd.
    • Ondersteuning toegevoegd voor Sony-smartphones en -tablets (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.
    • Ondersteuning toegevoegd voor ARM SoC en Apple T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460), SM6375 (Snapdragon 695) kaarten, SDM670 (leeuwenbek 670), MSM8976 (leeuwenbek 652), MSM8956 (leeuwenbek 650), RK3326 Odroid-Go/rg351, Zyxel NSA310S, InnoComm i.MX8MM, Odroid Go Ultra.

Tegelijkertijd vormde de Latin American Free Software Foundation een versie van de volledig vrije kernel 6.2 - Linux-libre 6.2-gnu, ontdaan van elementen van de firmware en stuurprogramma's die propriëtaire componenten of delen van code bevatten, waarvan de reikwijdte wordt beperkt door de fabrikant. De nieuwe release ruimt nieuwe klodders op in de nouveau-driver. Het laden van blobs is uitgeschakeld in mt7622, ​​mt7996 wifi en bcm4377 bluetooth-stuurprogramma's. Blobnamen in dts-bestanden opgeschoond voor de Aarch64-architectuur. Bijgewerkte code voor het opschonen van blobs in verschillende stuurprogramma's en subsystemen. Gestopt met het opschonen van het s5k4ecgx-stuurprogramma, omdat het uit de kernel was verwijderd.

Bron: opennet.ru

Voeg een reactie