Linux-kärnan version 5.8

Efter två månaders utveckling, Linus Torvalds lämnats kärnrelease Linux 5.8. Bland de mest anmärkningsvärda förändringarna: en KCSAN rastillståndsdetektor, en universell mekanism för att leverera meddelanden till användarutrymmet, hårdvarustöd för inline-kryptering, förbättrade säkerhetsmekanismer för ARM64, stöd för den ryska Baikal-T1-processorn, möjligheten att separat montera procfs-instanser , implementering av Shadow-säkerhetsmekanismer för ARM64 Call Stack och BTI.

Kernel 5.8 blev störst sett till antalet ändringar av alla kärnor under hela projektets existens. Dessutom är ändringarna inte relaterade till något delsystem, utan täcker olika delar av kärnan och är huvudsakligen förknippade med intern omarbetning och rengöring. De största förändringarna ser man hos förare. Den nya versionen inkluderade 17606 2081 korrigeringar från 20 65 utvecklare, vilket påverkade cirka 16180 % av alla filer i kärnkodlagret. Patchstorleken är 1043240 MB (ändringarna påverkade 489854 5.7 filer, 15033 39 37 rader kod lades till, 5.8 16 rader raderades). Som jämförelse hade 11-grenen 3 4 fixar och en patchstorlek på XNUMX MB. Cirka XNUMX % av alla ändringar som introduceras i XNUMX är relaterade till drivrutiner, cirka XNUMX % av ändringarna är relaterade till uppdateringskod som är specifik för hårdvaruarkitekturer, XNUMX % är relaterade till nätverksstacken, XNUMX % är relaterade till filsystem och XNUMX % är relaterade till interna kärndelsystem.

Den huvudsakliga innovationer:

  • Virtualisering och säkerhet
    • Laddningen av kärnmoduler som har sektioner med kod där de bitar som tillåter exekvering och skrivning är inställda samtidigt tillhandahålls. Förändringen genomfördes som en del av ett större projekt för att befria kärnan från användningen av minnessidor som tillåter samtidig exekvering och skrivning.
    • Det är nu möjligt att skapa separata procfs-instanser, vilket tillåter användning av flera procfs-monteringspunkter, monterade med olika alternativ, men som återspeglar samma processidentifierare-namnområde (pid-namnutrymme). Tidigare speglade alla procfs-monteringspunkter bara en intern representation, och alla ändringar av monteringsparametrarna påverkade alla andra monteringspunkter som är associerade med samma process-ID-namnområde. Bland de områden där montering med olika alternativ kan efterfrågas är implementering av lättviktsisolering för inbyggda system med möjlighet att dölja vissa typer av processer och informationsnoder i procfs.
    • Stöd för mekanismen har implementerats för ARM64-plattformen
      Shadow-Call Stack, tillhandahållen av Clang-kompilatorn för att skydda mot överskrivning av returadressen för en funktion i händelse av ett stackbuffertspill. Kärnan i skyddet är att spara returadressen i en separat "skuggstack" efter att ha överfört kontrollen till en funktion och hämtat denna adress innan funktionen avslutas.

    • Instruktionsstöd har lagts till för ARM64-plattformen ARMv8.5-BTI (Branch Target Indicator) för att skydda utförandet av uppsättningar instruktioner som inte bör förgrenas till. Blockering av övergångar till godtyckliga sektioner av kod implementeras för att förhindra skapandet av prylar i exploateringar som använder returorienterade programmeringstekniker (ROP - Return-Oriented Programming; angriparen försöker inte placera sin kod i minnet, utan arbetar på redan existerande delar av maskininstruktioner som slutar med en returkontrollinstruktion, från vilken en kedja av samtal byggs upp för att erhålla önskad funktionalitet).
    • Tillagt hårdvarustöd för inline-kryptering av blockenheter (Inline kryptering). Inlinep-krypteringsenheter är vanligtvis inbyggda i enheten, men är logiskt placerade mellan systemminnet och disken, och krypterar och dekrypterar transparent I/O baserat på kärnan-specificerade nycklar och en krypteringsalgoritm.
    • Lade till "initrdmem" kärnans kommandoradsalternativ för att låta dig ange den fysiska minnesadressen för initrd när du placerar den initiala startavbildningen i RAM.
    • Tillagd ny förmåga: CAP_PERFMON för att komma åt perf-delsystemet och utföra prestandaövervakning. CAP_BPF, som tillåter vissa BPF-operationer (som att ladda BPF-program) som tidigare krävde CAP_SYS_ADMIN-rättigheter (CAP_SYS_ADMIN-rättigheter är nu uppdelade i en kombination av CAP_BPF, CAP_PERFMON och CAP_NET_ADMIN).
    • Inkom en ny virtio-mem-enhet som låter dig hot-plugga och hot-plugga minne till gästsystem.
    • Implementerad återkallelse av mappningsoperationer i /dev/mem om enhetsdrivrutinen använder överlappande minnesområden.
    • Tillagt sårbarhetsskydd CROSSTalk/SRBDS, som låter dig återställa resultaten av vissa instruktioner som körs på en annan CPU-kärna.
  • Minnes- och systemtjänster
    • I dokumentet som definierar reglerna för formatering av koden, accepterad rekommendationer för användningen av inkluderande terminologi. Utvecklare rekommenderas inte att använda kombinationerna "master / slav" och "svartlista / vitlista", samt ordet "slav" separat. Rekommendationerna gäller endast ny användning av dessa termer. Omnämnanden av de angivna orden som redan finns i kärnan kommer att förbli orörda. I ny kod är användningen av de markerade termerna tillåten om det krävs för att stödja API och ABI som exponeras i användarutrymmet, samt vid uppdatering av koden för att stödja befintlig hårdvara eller protokoll vars specifikationer kräver användning av vissa termer.
    • Felsökningsverktyg ingår KCSAN (Kernel Concurrency Sanitizer), designad för dynamisk detektering tävlingsförhållanden inuti kärnan. Användningen av KCSAN stöds när man bygger in GCC och Clang, och kräver speciella modifieringar vid kompilering för att spåra minnesåtkomst (brytpunkter används som utlöses när minnet läses eller modifieras). Fokus för KCSAN:s utveckling låg på förebyggande av falska positiva, skalbarhet och användarvänlighet.
    • tillsatt universell mekanism leverera meddelanden från kärnan till användarutrymmet. Mekanismen är baserad på standardpipdrivrutinen och låter dig effektivt distribuera meddelanden från kärnan över kanaler som är öppna i användarutrymmet. Aviseringsmottagningspunkter är rör som öppnas i ett speciellt läge och tillåter att meddelanden som tas emot från kärnan samlas i en ringbuffert. Läsning utförs av den vanliga read()-funktionen. Kanalägaren bestämmer vilka källor i kärnan som behöver övervakas och kan definiera ett filter för att ignorera vissa typer av meddelanden och händelser. Av händelserna stöds för närvarande endast operationer med nycklar, som att lägga till/ta bort nycklar och ändra deras attribut. Dessa händelser är planerade att användas i GNOME.
    • Fortsatt utveckling av 'pidfd'-funktionalitet för att hjälpa till att hantera PID-återanvändningssituationer (pidfd är associerad med en specifik process och ändras inte, medan en PID kan associeras med en annan process efter att den aktuella processen associerad med det PID avslutas). Den nya versionen lägger till stöd för att använda pidfd för att koppla en process till namnutrymmen (så att pidfd kan specificeras när setns systemanrop körs). Genom att använda pidfd kan du styra bifogningen av en process till flera typer av namnutrymmen med ett anrop, vilket avsevärt minskar antalet nödvändiga systemanrop och implementerar bifogning i atomärt läge (om anslutning till ett av namnutrymmena misslyckas, kommer de andra inte att ansluta) .
    • Lade till ett nytt systemanrop faccessat2(), annorlunda än
      faccessat() ett ytterligare argument med flaggor som överensstämmer med POSIX-rekommendationer (tidigare emulerades dessa flaggor i C-biblioteket, och den nya faccessat2 tillåter att de implementeras i kärnan).

    • I Cgroup Lagt till en memory.swap.high-inställning som kan användas för att sakta ner uppgifter som tar för mycket bytesutrymme.
    • Till det asynkrona I/O-gränssnittet io_uring lagt till stöd för tee() systemanrop.
    • Tillagd mekanism "BPF iterator, designad för att mata ut innehållet i kärnstrukturer till användarutrymmet.
    • Försedd möjligheten att använda en ringbuffert för datautbyte mellan BPF-program.
    • In i mekanismen padata, designad för att organisera parallell exekvering av uppgifter i kärnan, lade till stöd för flertrådade uppgifter med lastbalansering.
    • I pstore-mekanismen, som låter dig spara felsökningsinformation om orsaken till kraschen i minnesområden som inte går förlorade mellan omstarterna, Lagt till backend för att spara information för att blockera enheter.
    • Från PREEMPT_RT kärngren rörd implementering av lokala lås.
    • tillsatt nytt bufferttilldelnings-API (AF_XDP), som syftar till att förenkla skrivningen av nätverksdrivrutiner med stöd för XDP (eXpress Data Path).
    • För RISC-V-arkitekturen har stöd för felsökning av kärnkomponenter med KGDB implementerats.
    • Innan release 4.8 har kraven för den version av GCC som kan användas för att bygga kärnan höjts. I en av nästa utgåvor är det planerat att höja ribban till GCC 4.9.
  • Diskundersystem, I/O och filsystem
    • I Device Mapper Lagt till ny dm-ebs-hanterare (emulera blockstorlek), som kan användas för att emulera en mindre logisk blockstorlek (till exempel för att emulera 512-byte sektorer på 4K-sektorstorleksdiskar).
    • F2FS-filsystemet stöder nu komprimering med LZO-RLE-algoritmen.
    • I dm-krypten Lagt till stöd för krypterade nycklar.
    • Btrfs har förbättrad hantering av läsoperationer i direkt I/O-läge. Vid montering accelererad kontrollera borttagna undersektioner och kataloger som lämnas utan en förälder.
    • En "nodelete"-parameter har lagts till i CIFS, vilket tillåter normala behörighetskontroller på servern, men förbjuder klienten att ta bort filer eller kataloger.
    • Ext4 har förbättrad felhantering ENOSPC när du använder multithreading. xattr har lagt till stöd för namnutrymmet gnu.* som används i GNU Hurd.
    • För Ext4 och XFS är stöd för DAX-operationer aktiverat (direkt åtkomst till filsystemet, förbikoppling av sidcachen utan att använda blockenhetsnivån) i förhållande till enskilda filer och kataloger.
    • I systemanrop statx() flagga tillagd STATX_ATTR_DAX, som när det anges, hämtar information med hjälp av DAX-motorn.
    • EXFAT Lagt till stöd för verifiering av startområde.
    • I FAT förbättrats proaktiv laddning av FS-element. Att testa en långsam 2TB USB-enhet visade en minskning av testtiden från 383 till 51 sekunder.
  • Nätverksdelsystem
    • I koden för att styra driften av nätverksbryggor Lagt till protokollstöd MRP (Media Redundancy Protocol), som tillåter feltolerans genom att koppla flera Ethernet-switchar.
    • Till trafikledningssystem (Tc) Lagt till ny "gate"-åtgärd, som gör det möjligt att definiera tidsintervall för bearbetning och kassering av vissa paket.
    • Stöd för att testa den anslutna nätverkskabeln och självdiagnos av nätverksenheter har lagts till i kärnan och verktyget ethtool.
    • Stöd för algoritmen MPLS (Multiprotocol Label Switching) har lagts till i IPv6-stacken för att dirigera paket med multiprotokolletikettväxling (MPLS stöddes tidigare för IPv4).
    • Tillagt stöd för överföring av IKE (Internet Key Exchange) och IPSec-paket över TCP (RFC 8229) för att kringgå eventuell UDP-blockering.
    • Inkom nätverksblockenhet rnbd, som låter dig organisera fjärråtkomst till en blockenhet med hjälp av RDMA-transport (InfiniBand, RoCE, iWARP) och RTRS-protokollet.
    • I TCP-stacken Lagt till stöd för avståndskomprimering i selektiva bekräftelsesvar (SACK).
    • För IPv6 genomförs TCP-LD stöd (RFC 6069, Långa anslutningsavbrott).
  • Оборудование
    • i915 DRM-drivrutinen för Intel-grafikkort inkluderar stöd för Intel Tiger Lake (GEN12)-chips som standard, för vilket genomförs möjligheten att använda SAGV-systemet (System Agent Geyserville) för att dynamiskt justera frekvens och spänning beroende på strömförbrukning eller prestandakrav.
    • Amdgpu-drivrutinen har lagt till stöd för FP16-pixelformatet och möjligheten att arbeta med krypterade buffertar i videominnet (TMZ, Trusted Memory Zone).
    • Lade till stöd för effektsensorer för AMD Zen- och Zen2-processorer, samt temperatursensorer för AMD Ryzen 4000 Renoir. Stöd för att hämta information om strömförbrukning via gränssnittet tillhandahålls för AMD Zen och Zen2 RAPL (Körande medeleffektgräns).
    • Lade till stöd för NVIDIA-modifieringsformatet till Nouveau-drivrutinen. För gv100 har möjligheten att använda sammanflätade skanningslägen implementerats. Lade till vGPU-detektering.
    • Lade till stöd för Adreno A405, A640 och A650 GPU:er till MSM (Qualcomm) drivrutinen.
    • tillsatt internt ramverk för hantering av DRM-resurser (Direct Rendering Manager).
    • Lade till stöd för Xiaomi Redmi Note 7 och Samsung Galaxy S2-smarttelefoner, samt Elm/Hana Chromebook-bärbara datorer.
    • Tillagda drivrutiner för LCD-paneler: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • Tillagt stöd för ARM-kort och plattformar Renesas "RZ/G1H", Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-LIME-e, Check Point
      , Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI.

    • Tillagt stöd för MIPS-processor Loongson-2K (förkortat Loongson64). För CPU Loongson 3 har stöd för virtualisering med KVM-hypervisorn lagts till.
    • Lagt till
      stöd för den ryska Baikal-T1-processorn och system-on-chip baserat på den BE-T1000. Baikal-T1-processorn innehåller två P5600 MIPS 32 r5 superskalära kärnor som arbetar på 1.2 GHz. Chipet innehåller L2-cache (1 MB), DDR3-1600 ECC-minneskontroller, 1 10Gb Ethernet-port, 2 1Gb Ethernet-portar, PCIe Gen.3 x4-kontroller, 2 SATA 3.0-portar, USB 2.0, GPIO, UART, SPI, I2C. Processorn ger hårdvarustöd för virtualisering, SIMD-instruktioner och en integrerad kryptografisk hårdvaruaccelerator som stöder GOST 28147-89. Chipet är utvecklat med en MIPS32 P5600 Warrior-processorkärnenhet licensierad från Imagination Technologies.

Samtidigt latinamerikanska Free Software Foundation bildas
вариант helt gratis kärna 5.8 - Linux-fri 5.8-gnu, rensad från firmware och drivrutinselement som innehåller icke-fria komponenter eller kodsektioner, vars omfattning är begränsad av tillverkaren. Den nya versionen inaktiverar blob-laddning i drivrutiner för 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 ZL38060 Home Processor, Microsemi Connected Home Process och I2C EEPROM Slave. Uppdaterad blob-rengöringskod i Adreno GPU, HabanaLabs Goya, x86 pekskärm, vt6656 och btbcm drivrutiner och delsystem.

Källa: opennet.ru

Lägg en kommentar