Na twee maanden ontwikkeling heeft Linus Torvalds de release van de kernel . Enkele van de meest opvallende wijzigingen zijn: een race condition detector KCSAN, een universeel mechanisme voor het leveren van meldingen aan de gebruikersruimte, ondersteuning voor inline-encryptie hardware, uitgebreide beveiligingsmechanismen voor ARM64, ondersteuning voor de Russische processor Baikal-T1, de mogelijkheid om procfs-instanties afzonderlijk te koppelen, implementatie van beveiligingsmechanismen zoals Shadow Call Stack en BTI voor ARM64.
Kernel 5.8 is de grootste update ooit in termen van wijzigingen binnen het project. De wijzigingen zijn echter niet gerelateerd aan een enkel subsysteem, maar bestrijken verschillende delen van de kernel en zijn voornamelijk gerelateerd aan interne herstructureringen en opruimingen. De meeste veranderingen zijn te zien in de drivers. De nieuwe versie bevat 17606 correcties van 2081 ontwikkelaars, die ongeveer 20% van alle bestanden in de code repository hebben geraakt. De patchgrootte is 65 MB (de wijzigingen betroffen 16180 bestanden, met 1043240 toegevoegde regels code en 489854 verwijderde regels). Ter vergelijking: in de 5.7 tak werden 15033 correcties doorgevoerd en was de patchgrootte 39 MB. Ongeveer 37% van alle wijzigingen in 5.8 heeft betrekking op stuurprogramma's voor apparaten, ongeveer 16% heeft betrekking op de update van hardware-specifieke code, 11% heeft betrekking op de netwerstack, 3% op bestandssystemen en 4% op interne subsysteemwijzigingen in de kernel.
:
- Virtualisatie en beveiliging
- Er is een beperking ingesteld op het laden van kernelmodules die secties met code bevatten, waarin zowel uitvoer- als schrijfrechten zijn toegestane. Deze wijziging is gerealiseerd binnen het kader van een groter project om de kernel te ontdoen van het gebruik van geheugenspagina's die zowel uitvoering als schrijven toelaten.
- Er is een mogelijkheid ontstaan om afzonderlijke instanties van procfs te creëren, waarmee meerdere procfs-mountpunten kunnen worden gebruikt, gemonteerd met verschillende opties, maar die een enkele namespace voor proces-ID's (pid-namespace) weerspiegelen. Eerder weerspiegelden alle procfs-mountpunten slechts één interne representatie en enige wijziging van de mountparameters had invloed op alle andere mountpunten die met dezelfde namespace voor proces-ID's verbonden waren. Een van de gebieden waar het montagesysteem met verschillende opties nuttig kan zijn, is de implementatie van lichtgewicht isolatie voor embedded systemen, met de mogelijkheid om bepaalde typen processen en informatieknopen in procfs te verbergen.
- Voor het ARM64-platform is er ondersteuning toegevoegd voor de
, geleverd door de Clang-compiler, ter bescherming tegen het overschrijven van het terugkeeradres vanuit een functie in het geval van een stackbuffer-overflow. De essentie van de bescherming ligt in het opslaan van het terugkeeradres in een aparte "schaduw"-stack na het overdragen van de controle naar de functie, en het ophalen van dit adres voordat de functie wordt verlaten. - Voor het ARM64-platform zijn instructies toegevoegd voor (Branch Target Indicator) ter bescherming van de uitvoering van instructiesets waarop niet mag worden doorverwezen bij vertakking. Het blokkeren van doorverwijzingen naar willekeurige codegebieden is geïmplementeerd om de creatie van gadgets in exploits tegen te gaan die technieken van Return-Oriented Programming (ROP) gebruiken, waarbij de aanvaller niet probeert zijn eigen code in het geheugen te plaatsen, maar werkt met al bestaande stukjes machine-instructies die eindigen met een terugroepprogramma-instructie, waaruit een oproepketen wordt opgebouwd om de gewenste functionaliteit te verkrijgen.
- Ondersteuning voor hardware voor inline-encryptie van blokapparaten is toegevoegd (). Inline encryptie-apparaten zijn doorgaans ingebed in de opslag, maar bevinden zich logisch tussen het systeemgeheugen en de schijf, waarbij ze transparante encryptie en decryptie van invoer/uitvoer uitvoeren op basis van door de kernel opgegeven keys en encryptie-algoritmes.
- Een kernel-opdrachtregelparameter 'initrdmem' is toegevoegd, waarmee een fysieke adres voor het plaatsen van initrd in het geheugen kan worden opgegeven bij het plaatsen van het initiële opstartbeeld in RAM.
- Nieuwe capabilities toegevoegd: CAP_PERFMON voor toegang tot het perf-systeem en het uitvoeren van prestatiemonitoring. , waarmee sommige bewerkingen op BPF (bijvoorbeeld het laden van BPF-programma's) kunnen worden uitgevoerd die eerder CAP_SYS_ADMIN-rechten vereisten (nu zijn de bevoegdheden van CAP_SYS_ADMIN verdeeld over een combinatie van CAP_BPF, CAP_PERFMON en CAP_NET_ADMIN).
- Nieuw apparaat virtio-mem, dat het hot-pluggen en -ontkoppelen van geheugen naar gastsystemen mogelijk maakt.
- Terugroeping van mappingoperaties in /dev/mem is geïmplementeerd als de apparaatschijf overlappingen in geheugen gebruikt.
- Bescherming tegen kwetsbaarheid , wat het mogelijk maakt om resultaten van sommige instructies, uitgevoerd op een andere CPU-kern, te herstellen.
- Geheugen en systeemdiensten
- In het document dat de coderingseisen definieert, aanbevelingen voor het gebruik van inclusieve terminologie. Ontwikkelaars wordt afgeraden om de termen 'master/slave' en 'blacklist/whitelist' te gebruiken, evenals afzonderlijk het woord 'slave'. De aanbevelingen zijn alleen van toepassing op nieuw gebruik van deze termen. Bestaande vermeldingen in de kernel zullen ongemoeid blijven. In nieuwe code is het gebruik van de genoemde termen toegestaan als dit noodzakelijk is voor het behouden van de API en ABI in de gebruikersruimte, evenals bij het bijwerken van code ter ondersteuning van bestaande hardware of protocollen waarvoor het gebruik van bepaalde termen verplicht is.
- Een debuggingtool is opgenomen (Kernel Concurrency Sanitizer), bedoeld voor het dynamisch opsporen van binnen de kernel. Het gebruik van KCSAN wordt ondersteund bij het bouwen met GCC en Clang, en vereist speciale aanpassingen tijdens het compileren om toegang tot geheugen bij te houden (er worden breakpoints gebruikt die worden geactiveerd bij het lezen of wijzigen van geheugen). Bij de ontwikkeling van KCSAN is veel aandacht besteed aan het voorkomen van foutieve activaties, schaalbaarheid en gebruiksgemak.
- Toegevoegd melding van notificaties van de kernel naar de gebruikersruimte. Het mechanisme is gebaseerd op de standaard pipe-driver en maakt het mogelijk notificaties van de kernel efficiënt te verdelen over de in de gebruikersruimte geopende kanalen. De meldpunten voor notificaties zijn pipes die in een speciale modus zijn geopend en die het mogelijk maken om berichten van de kernel in een ringbuffer op te slaan. Lezen gebeurt met de gebruikelijke functie read(). De eigenaar van het kanaal bepaalt welke bronnen in de kernel moeten worden gevolgd en kan een filter instellen om berichten en gebeurtenissen van een bepaald type te negeren. Tot nu toe worden alleen gebeurtenissen met sleutels ondersteund, zoals het toevoegen/verwijderen van sleutels en het wijzigen van hun eigenschappen. Deze gebeurtenissen zijn bedoeld voor gebruik in GNOME.
- De ontwikkeling van de functionaliteit ‘pidfd’ is voortgezet, wat helpt bij het afhandelen van situaties met hergebruik van PID (pidfd is gekoppeld aan een specifiek proces en verandert niet, terwijl de PID aan een ander proces kan worden gekoppeld nadat het huidige proces is beëindigd, dat aan deze PID is gekoppeld). In de nieuwe versie is ondersteuning toegevoegd voor het gebruik van pidfd om processen aan namespaces te koppelen (het is toegestaan om pidfd op te geven bij het uitvoeren van de systeemaanroep setns). Het gebruik van pidfd maakt het mogelijk om met één aanroep de koppeling van een proces aan meerdere typen namespaces te beheren, wat het aantal noodzakelijke systeemaanroepen aanzienlijk vermindert en het koppelen in atomair modus implementeert (als er bij het koppelen aan een van de namespaces een fout optreedt, worden ook de andere niet aangesloten).
- Er is een nieuwe systeemaanroep faccessat2() toegevoegd, die verschilt van
met een extra argument met vlaggen die overeenkomen met de aanbevelingen van POSIX (eerder werden deze vlaggen nagebootst in de C-bibliotheek, en de nieuwe faccessat2 maakt het mogelijk deze in de kernel te implementeren). - In Cgroup is de instelling memory.swap.high toegevoegd, die kan worden gebruikt om taken te vertragen die te veel ruimte in de swap gebruiken.
- In de interface voor asynchrone invoer/uitvoer is de ondersteuning voor de systeemaanroep tee() toegevoegd.
- Een mechanisme ', bedoeld om de inhoud van kernelstructuren naar de gebruikersruimte te sturen.
- de mogelijkheid om een ringbuffer te gebruiken voor gegevensuitwisseling tussen BPF-programma's.
- In breng , ontworpen voor de organisatie van parallelle taakuitvoering in de kernel, is ondersteuning voor multithreaded taken met load balancing toegevoegd.
- In het pstore-mechanisme, dat debug-informatie over de oorzaak van een crash in het geheugen kan opslaan, die niet verloren gaat tussen herstarts, de backend voor het opslaan van informatie op block devices.
- Uit de PREEMPT_RT-kernelbranch implementatie van lokale vergrendelingen.
- nieuwe buffer allocatie-API (AF_XDP), gericht op het vereenvoudigen van het schrijven van netwerkdrivers met XDP (eXpress Data Path) ondersteuning.
- Voor de RISC-V-architectuur is ondersteuning voor het debuggen van kernelcomponenten via KGDB geïmplementeerd.
- Tot de release 4.8 zijn de vereisten voor de versie van GCC die kan worden gebruikt voor het bouwen van de kernel verhoogd. In een van de volgende releases wordt gepland om de drempel te verhogen naar GCC 4.9.
- Opslagsubsystemen, invoer/uitvoer en bestandssystemen
- In Device Mapper is er een nieuwe dm-ebs (emuleer blokgrootte) handler, die kan worden gebruikt voor het emuleren van een kleinere logische blokgrootte (bijvoorbeeld voor het emuleren van 512-byte sectoren op schijven met een sector grootte van 4K).
- In het F2FS-bestandssysteem is er ondersteuning voor compressie met behulp van het LZO-RLE-algoritme.
- In dm-crypt ondersteuning voor versleutelde sleutels.
- In Btrfs is de verwerking van leesoperaties in directe invoer/uitvoer verbeterd. Bij het monteren wordt gecontroleerd op verwijderde subdirectories en mappen zonder ouder.
- In CIFS is een parameter 'nodelete' toegevoegd, die standaard controle op rechten op de server toestaat, maar de client verbiedt om bestanden of mappen te verwijderen.
- In Ext4 is de verwerking van fouten verbeterd bij gebruik van multithreading. In xattr is ondersteuning voor de gnu.* namespace toegevoegd, gebruikt in GNU Hurd.
- Voor Ext4 en XFS is ondersteuning voor DAX-operaties (directe toegang tot FS buiten de paginacache zonder gebruik van block device niveau) geïmplementeerd voor afzonderlijke bestanden en mappen.
- In de systeemaanroep een vlag toegevoegd , waarbij informatie wordt opgehaald met behulp van het DAX-mechanisme.
- In EXFAT is ondersteuning voor de verificatie van het opstartgebied toegevoegd.
- In FAT is er voorspellende opstart van FS-elementen. Testen met een trage 2TB USB-stick toonden een vermindering van de testtijd van 383 naar 51 seconden aan.
- Netwerk subsysteem
- In de controlecode voor de werking van netwerken bruggen ondersteuning voor het protocol (Media Redundancy Protocol), dat redundantie biedt door meerdere Ethernet-switches te ringstructuren.
- In het verkeersbeheer systeem (Tc) een nieuwe actie «gate», die de mogelijkheid biedt om tijdsintervallen te bepalen voor het verwerken en afwijzen van bepaalde pakketten.
- In de kernel en de tool ethtool is ondersteuning toegevoegd voor testfuncties van de aangesloten netwerkkabel en zelfdiagnose van netwerkapparaten.
- De IPv6-stack heeft ondersteuning gekregen voor het MPLS-algoritme (Multiprotocol Label Switching) voor het routeren van pakketten met behulp van multiprotocol labeling (voor IPv4 was MPLS al eerder ondersteund).
- Ondersteuning voor het verzenden van IKE (Internet Key Exchange) en IPSec-pakketten over TCP is toegevoegd () om mogelijke blokkades van UDP te omzeilen.
- een netwerkblokapparaat rnbd, dat de organisatie van externe toegang tot een blokapparaat mogelijk maakt via RDMA-vervoer (InfiniBand, RoCE, iWARP) en het RTRS-protocol.
- In de TCP-stack is ondersteuning voor het comprimeren van bereiken in de antwoorden op selectieve bevestiging (selective acknowledgment, SACK) toegevoegd.
- Voor IPv6 is ondersteuning voor TCP-LD (, Langdurige Verbindingsonderbrekingen) toegevoegd.
- Apparatuur
- In de DRM-driver i915 voor Intel videokaarten is standaard ondersteuning voor Intel Tiger Lake (GEN12) chips toegevoegd, waarvoor ook de mogelijkheid is toegevoegd om het SAGV-systeem (System Agent Geyserville) te gebruiken voor dynamische aanpassing van frequentie en spanning op basis van de eisen voor energieverbruik of prestaties.
- In de amdgpu-driver is ondersteuning toegevoegd voor het pixel formaat FP16 en de mogelijkheid om met versleutelde buffers in videogeheugen (TMZ, Trusted Memory Zone) te werken.
- Ondersteuning is toegevoegd voor energieverbruik sensoren van AMD Zen en Zen2-processors, evenals temperatuur sensoren van AMD Ryzen 4000 Renoir. Voor AMD Zen en Zen2 is ondersteuning voor het extraheren van informatie over energieverbruik via de interface (Running Average Power Limit) toegevoegd.
- In de Nouveau-driver is ondersteuning toegevoegd voor NVIDIA-modificatormodellen. Voor gv100 is de mogelijkheid om interlaced scan modes te gebruiken gerealiseerd. VGPU-detectie is toegevoegd.
- In de MSM-driver (Qualcomm) is ondersteuning voor de GPU Adreno A405, A640 en A650 toegevoegd.
- een interne framework voor resourcebeheer in DRM (Direct Rendering Manager).
- Ondersteuning is toegevoegd voor smartphones Xiaomi Redmi Note 7 en Samsung Galaxy S2, evenals voor laptops Elm/Hana Chromebook.
- Drivers zijn toegevoegd voor LCD-panelen: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
- Ondersteuning is toegevoegd voor ARM-borden en Renesas-platforms «RZ/G1H», Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-LIME-eMMC, Check Point L-50,
, Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI. - Ondersteuning toegevoegd voor de MIPS-processor Loongson-2K (afgekort Loongson64). Voor de CPU Loongson 3 is ondersteuning voor virtualisatie toegevoegd met gebruik van de KVM-hypervisor.
-
ondersteuning voor de Russische Baikal-T1-processor en het op deze chip gebaseerde systeem . De Baikal-T1-processor bevat twee superscalar P5600 MIPS 32 r5-kernen die draaien op een frequentie van 1,2 GHz. De chip bevat L2-cache (1 MB), een DDR3-1600 ECC-geheugencontroller, 1 poort 10Gb Ethernet, 2 poorten 1Gb Ethernet, een PCIe Gen.3 x4-controller, 2 poorten SATA 3.0, USB 2.0, GPIO, UART, SPI en I2C. De processor biedt hardwarematige ondersteuning voor virtualisatie, SIMD-instructies en een geïntegreerde hardwareversneller voor cryptografische bewerkingen, die de GOST 28147-89 ondersteunt. De chip is ontwikkeld met behulp van een gelicentieerde MIPS32 P5600 Warrior-core van Imagination Technologies.
Tegelijkertijd Latijns-Amerikaanse Stichting voor Vrije Software
optie — , vrijgemaakt van elementen van firmware en stuurprogramma's die niet-vrije componenten of codegebieden bevatten, waarvan het gebruik beperkt is door de fabrikant. In deze nieuwe release is de blobb-loading in de stuurprogramma's voor Atom ISP Video, MediaTek 7663 USB/7915 PCIe, Realtek 8723DE WiFi, Renesas PCI xHCI, HabanaLabs Gaudi, Enhanced Asynchronous Sample Rate Converter, Maxim Integrated MAX98390 Speaker Amplifier, Microsemi ZL38060 Connected Home Audio Processor, en I2C EEPROM Slave uitgeschakeld. De code voor het schoonmaken van blobs in de stuurprogramma's en subsystemen van Adreno GPU, HabanaLabs Goya, x86-touchscreen, vt6656 en btbcm is vernieuwd.
Bron: opennet.ru
