După două luni de dezvoltare, Linus Torvalds a prezentat versiunea kernel-ului Linux 5.11. Printre cele mai notabile modificări se numără: suportul pentru enclavele Intel SGX, un nou mecanism de interceptare a apelurilor sistemului, magistrala virtuală auxiliary, interdicția de construire a modulelor fără MODULE_LICENSE(), modul de filtrare rapidă a apelurilor sistemului în seccomp, încetarea suportului pentru arhitectura ia64, relocarea tehnologiei WiMAX în rama „staging”, precum și posibilitatea de incapsulare SCTP în UDP.
Noua versiune include 15480 de corecturi din partea a 1991 de dezvoltatori, dimensiunea patch-ului fiind de 72 MB (schimbările au vizat 12090 de fișiere, s-au adăugat 868025 de linii de cod și s-au șters 261456 de linii). Aproximativ 46% din toate modificările din 5.11 se referă la driverele de dispozitive, aproximativ 16% la actualizarea codului specific arhitecturilor hardware, 13% se referă la stiva de rețea, 3% la sistemele de fișiere și 4% la subsistemele interne ale kernel-ului.
Noutăți principale:
- Subsistemul de disc, I/O și sistemele de fișiere
- În Btrfs au fost adăugate mai multe opțiuni de montare pentru utilizarea la recuperarea datelor de pe un FS deteriorat: „rescue=ignorebadroots” pentru a monta, în ciuda deteriorărilor unor arbore de rădăcină (extent, uuid, data reloc, device, csum, free space), „rescue=ignoredatacsums” pentru a dezactiva verificarea sumelor de control pentru date și „rescue=all” pentru a activa simultan modurile ‘ignorebadroots’, ‘ignoredatacsums’ și ‘nologreplay’. Suportul pentru opțiunea de montare „inode_cache” a fost oprit, aceasta fiind declarată anterior ca învechită. Codul a fost pregătit pentru implementarea suportului pentru blocuri de metadate și date cu dimensiunea mai mică decât pagina (PAGE_SIZE), precum și pentru suportul modului de alocare zonată. Cererile nebufferizate (Direct IO) au fost mutate pe infrastructura iomap. Performanța mai multor operații a fost optimizată, în unele cazuri accelerarea putând atinge zeci de procente.
- În XFS a fost implementat un flag „needsrepair”, care semnalizează necesitatea restaurării. Atunci când acest flag este setat, FS nu poate fi montat până când flag-ul nu este resetat de utilitarul xfs_repair.
- În Ext4 au fost propuse doar corecturi de erori și optimizări, precum și o curățare a codului.
- A fost permisă reexportarea sistemelor de fișiere montate peste NFS (adică, o partiție montată prin NFS poate fi acum exportată prin NFS și utilizată ca un cache intermediar).
- Apelul sistemului close_range() permite procesului să închidă o întreagă gamă de descriptorii de fișiere deschiși, fiind adăugată opțiunea CLOSE_RANGE_CLOEXEC pentru a închide descriptorii în modul close-on-exec.
- În sistemul de fișiere F2FS au fost adăugate noi apeluri ioctl() care permit utilizatorilor să gestioneze ce fișiere sunt păstrate într-o formă comprimată. A fost adăugată opțiunea de montare „compress_mode=” pentru a alege amplasarea handlerului de gestionare a compresiei fie pe partea nucleului, fie în spațiul utilizatorului.
- A fost oferită posibilitatea de a monta Overlayfs din procese neprivilegiate, folosind un spațiu separat de identificatori de utilizator (user namespace). pentru a verifica conformitatea modelului de securitate, a fost efectuat un audit complet al codului. De asemenea, în Overlayfs a fost adăugată capacitatea de a porni folosind copii ale imaginilor sistemului de fișiere prin dezactivarea opțională a verificării UUID.
- În sistemul de fișiere Ceph a fost adăugată suportul pentru protocolul msgr2.1, care permite aplicarea algoritmului AES-GCM în timpul transmiterii datelor în formă criptată.
- În modulul dm-multipath a fost implementată capacitatea de a lua în considerare afinitatea la CPU (“IO affinity”) la alegerea rutei pentru cererile de intrare/ieșire.
- Memorie și servicii de sistem
- A fost adăugat un nou mecanism de interceptare a apelurilor de sistem, bazat pe prctl(), care permite generarea de excepții din spațiul utilizatorului atunci când se accesează un anumit apel de sistem și emularea execuției acestuia. Funcționalitatea specificată este cerută în Wine și Proton pentru emularea apelurilor de sistem Windows, necesară pentru a asigura compatibilitatea cu jocurile și programele care execută direct apeluri de sistem, ocolind Windows API (de exemplu, pentru a proteja împotriva folosirii neautorizate).
- În apelul de sistem userfaultfd(), destinat gestionării page faults (acces la paginile de memorie nealocate) în spațiul utilizatorului, a apărut posibilitatea de a dezactiva gestionarea excepțiilor care apar la nivelul nucleului, pentru a complica exploatarea anumitor vulnerabilități.
- În subsistemul BPF a fost adăugat suport pentru stocarea locală a sarcinii (task-local storage), care oferă legătura datelor la un anumit handler BPF.
- S-a refăcut complet contabilizarea consumului de memorie de către programele BPF — pentru a gestiona utilizarea memoriei în obiectele BPF, s-a propus un controler cgroup în loc de rlimit-ul memlock.
- În mecanismul BTF (BPF Type Format), care furnizează informații pentru verificarea tipurilor în pseudocodul BPF, s-a implementat suportul pentru modulele nucleului.
- Interfața de input/output asincron io_uring a fost extinsă cu suport pentru apelurile de sistem shutdown(), renameat2() și unlinkat(). La apelarea io_uring_enter(), a fost adăugată posibilitatea de a specifica un timeout (se poate verifica suportul pentru argumentul de timeout folosind flagul IORING_FEAT_EXT_ARG).
- Arhitectura ia64, folosită în procesoarele Intel Itanium, a fost trecută în categoria celor abandonate («orphaned»), ceea ce implică oprirea testării. Hewlett Packard Enterprise a oprit comenzile pentru echipamentele Itanium noi, iar Intel a făcut acest lucru încă de anul trecut.
- S-a oprit suportul pentru sistemele bazate pe arhitectura MicroBlaze care nu sunt echipate cu un bloc de control al memoriei (MMU). Astfel de sisteme nu mai sunt întâlnite pe piață.
- Pentru arhitectura MIPS s-a adăugat suport pentru testarea acoperirii codului (coverage testing) utilizând utilitarul gcov.
- A fost adăugat suport pentru magistrala virtuală auxiliară, pentru interacțiunea cu dispozitive multifuncționale care combină funcționalitate ce necesită drivere diferite (de exemplu, plăci de rețea cu suport pentru Ethernet și RDMA). Magistrala poate fi utilizată pentru a aloca un driver primar și unul secundar dispozitivului, în situațiile în care utilizarea subsistemului MFD (Multi-Function Devices) este problematică.
- Pentru arhitectura RISC-V s-a adăugat suport pentru sistemul de distribuție a memoriei CMA (Contiguous Memory Allocator), optimizat pentru alocarea de zone mari de memorie continuă utilizând tehnica mutării paginilor de memorie. De asemenea, pentru RISC-V au fost implementate măsuri de restricționare a accesului la /dev/mem și contabilizarea timpului de procesare a întreruperilor.
- Pentru sistemele ARM pe 32 de biți s-a adăugat suport pentru instrumentul de depanare KASan (Kernel address sanitizer), care detectează erorile de gestionare a memoriei. Pentru ARM pe 64 de biți, implementarea KASan a fost adaptată pentru a utiliza etichetele MTE (MemTag).
- A fost adăugat apelul de sistem epoll_pwait2(), care permite utilizarea timeout-urilor cu precizie nanosecundă (apelul epoll_wait manipulează milisecundele).
- În sistemul de construcție, a fost asigurată o ieșire de eroare atunci când se încearcă construirea modulelor de kernel terminate în care licența pentru cod nu este definită utilizând macro-ul MODULE_LICENSE(). De acum înainte, o eroare de construcție va fi provocată și de utilizarea macro-ului EXPORT_SYMBOL() pentru funcții statice.
- A fost adăugată suport pentru maparea obiectelor GEM din memorie folosită pentru intrare/ieșire, accelerând astfel lucrul cu framebuffer-ul pe anumite arhitecturi.
- În Kconfig, suportul pentru Qt4 a fost eliminat (suportul pentru Qt5, GTK și Ncurses rămâne).
- Virtualizare și securitate
- În apelul de sistem seccomp() a fost adăugată suport pentru modul de reacție rapidă, permițând stabilirea extrem de rapidă a permisiunii sau interzicerea unui apel de sistem pe baza tabelului de privilegii atașat procesului (constant-action bitmap), care nu necesită rularea unui handler BPF.
- Sunt integrate componentele kernel pentru crearea și gestionarea enclave-urilor bazate pe tehnologia Intel SGX (Software Guard eXtensions), permițând aplicațiilor să execute cod în zone de memorie izolate criptat, accesul restului sistemului fiind limitat.
- Ca parte a inițiativei de restricționare a accesului din spațiul utilizatorului la registrele MSR (model-specific register), scrierea în registrul MSR_IA32_ENERGY_PERF_BIAS este interzisă, permițând modificarea modului de eficiență energetică a procesorului („normal”, „performanță”, „economisire de energie”).
- Din ramura kernel-rt pentru sistemele în timp real, a fost transferată capacitatea de a dezactiva migrarea sarcinilor cu prioritate mare între CPU.
- Pentru sistemele ARM64 a fost adăugată posibilitatea de a aplica etichete MTE (MemTag, Memory Tagging Extension) pentru adresele de memorie ale manejmentului semnalelor. Utilizarea MTE este activată prin specificarea opțiunii SA_EXPOSE_TAGBITS în sigaction() și permite organizarea verifikării corectitudinii utilizării pointerilor pentru a bloca exploatarea vulnerabilităților cauzate de apeluri la blocuri de memorie deja eliberate, suprascrierii buffer-ului, apeluri înainte de inițializare și utilizarea în afara contextului curent.
- A fost adăugat parametrul „DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING”, care permite subsistemului dm-verity să verifice semnăturile hash ale certificatelor stocate în magazinul secundar de chei (keyring). În practică, această configurare permite verificarea nu doar a certificatelor încorporate în kernel, ci și a certificatelor încărcate în timpul funcționării, permițând actualizarea certificatelor fără actualizarea întregului kernel.
- În User-mode Linux a fost adăugat suport pentru modul suspendare-la-inactivitate, permițând înghețarea mediu și utilizarea semnalului SIGUSR1 pentru a ieși din modul de somn.
- În mecanismul virtio-mem, care permite conectarea și deconectarea la cald a memoriei pentru mașinile virtuale, a fost adăugat suport pentru modul de bloc mare (BBM, Big Block Mode), oferind posibilitatea de a transmite sau retrage memorie în blocuri ce depășesc dimensiunea blocului de memorie al nucleului, necesar pentru optimizarea VFIO în QEMU.
- În implementarea TLS la nivel de nucleu a fost adăugat suport pentru cifra CHACHA20-POLY1305.
- Subsystema de rețea
- Pentru 802.1Q (VLAN) a fost implementat un mecanism de gestionare a eroziunii conexiunii (CFM, Connectivity Fault Management), permițând identificarea, verificarea și izolarea defecțiunilor în rețele cu punți virtuale (Virtual Bridged Networks). De exemplu, CFM poate fi folosit pentru localizarea problemelor în rețele care se extind peste mai multe organizații independente, ai căror angajați au acces doar la echipamentele lor.
- A fost adăugat suport pentru încapsularea pachetelor protocolului SCTP în pachete UDP (RFC 6951), ceea ce permite utilizarea SCTP în rețele cu traductoare de adrese vechi, care nu suportă direct SCTP, precum și implementarea SCTP pe sistemele care nu oferă acces direct la nivelul IP.
- Implementarea tehnologiei WiMAX a fost mutată în stadiul de dezvoltare și este planificată pentru eliminare în viitor, dacă nu se găsesc utilizatori care au nevoie de WiMAX. WiMAX nu mai este folosit în rețelele publice, iar în nucleu, singurul driver care poate fi folosit pentru WiMAX rămâne vechiul driver Intel 2400m. În configuratorul de rețea NetworkManager, suportul pentru WiMAX a fost oprit în 2015. În prezent, WiMAX a fost practic complet înlocuit cu tehnologii precum LTE, HSPA+ și Wi-Fi 802.11n.
- Au fost efectuate lucrări pentru optimizarea performanței procesării traficului TCP de intrare în modul zerocopy, adică fără copieri suplimentare în buffer-uri noi. Pentru fluxurile de dimensiuni medii, cu zeci sau sute de kilobyte de date, utilizarea zerocopy în loc de recvmsg() este mult mai eficientă. De exemplu, modificările realizate au permis creșterea eficienței procesării traficului în stil RPC cu mesaje de 32 KB utilizând zerocopy cu 60-70%.
- Au fost adăugate apeluri noi ioctl() pentru crearea de punți de rețea ce acoperă mai multe canale PPP. Funcționalitatea propusă permite cadrelor să se deplaseze dintr-un canal în altul, de exemplu, din PPPoE într-o sesiune PPPoL2TP.
- Continuarea integrării în nucleul MPTCP (MultiPath TCP), extensia protocolului TCP pentru organizarea funcționării conexiunii TCP cu livrarea pachetelor simultan pe mai multe rute prin diferite interfețe de rețea, legate la adrese IP diferite. În noua versiune, a fost implementat suportul pentru opțiunea ADD_ADDR pentru a anunța disponibile adreselor IP la care se poate conecta atunci când se adaugă noi fluxuri la o conexiune existentă MPTCP.
- A fost adăugată posibilitatea de a configura acțiunile în cazul depășirii bugetului de polling al conexiunilor (busy-polling). Modificarea disponibilă anterior SO_BUSY_POLL implica trecerea la softirq când bugetul era epuizat. Pentru aplicațiile care trebuie să continue să utilizeze polling, a fost propusă o nouă opțiune SO_PREFER_BUSY_POLL.
- În IPv6 a fost implementat suportul pentru modurile SRv6 End.DT4 și End.DT6, utilizate pentru crearea de rețele IPv4 L3 multi-utilizator. VPN și dispozitive VRF (Virtual routing and forwarding).
- În Netfilter, a fost unificată implementarea expresiilor set, ceea ce a permis specificarea mai multor expresii pentru fiecare element din listele set.
- În stiva wireless 802.11 au fost adăugate API-uri pentru configurarea limitărilor de putere SAR, precum și a parametrilor AE PWE și HE MCS. În driver-ul Intel iwlwifi a fost adăugat suportul pentru banda de 6GHz (Ultra High Band). În driver-ul Qualcomm Ath11k a fost adăugat suportul pentru tehnologia de configurare rapidă a conexiunii FILS (Fast Initial Link Setup, standardizată ca IEEE 802.11ai), care permite eliminarea întârzierilor în roamingul în timpul migrației de la un punct de acces la altul.
- Echipament
- În driver-ul amdgpu a fost implementat suportul pentru APU AMD "Green Sardine" (Ryzen 5000) și GPU "Dimgrey Cavefish" (Navi 2), precum și suportul inițial pentru APU AMD Van Gogh cu nucleu Zen 2 și GPU RDNA 2 (Navi 2). A fost adăugat suportul pentru noile identificatoare APU Renoir (bazate pe CPU Zen 2 și GPU Vega).
- În driverul i915 pentru plăcile video Intel este implementat suportul pentru tehnologia IS (Integer scaling) cu realizarea unui filtru pentru scalarea cu luarea în considerare a stării pixelilor vecini (interpolare Nearest-neighbor) pentru a determina culoarea pixelilor lipsă. Suportul pentru plăcile grafice discrete Intel DG1 a fost extins. A fost implementat suportul pentru tehnologia „Big Joiner”, prezentă începând de la cipurile Ice Lake / Gen11, care permite utilizarea unui transcodificator pentru procesarea a două fluxuri, de exemplu, pentru ieșirea pe un ecran 8K printr-un singur DisplayPort. A fost adăugat un mod de comutare asincronă între două bufere în memoria video (async flip).
- În driverul nouveau a fost adăugat suportul inițial pentru GPU NVIDIA bazat pe microarhitectura „Ampere” (GA100, GeForce RTX 30xx), deocamdată limitat la funcționalitățile de gestionare a modurilor video.
- A fost adăugat suportul pentru protocolul 3WIRE, utilizat în panourile LCD. A fost adăugat suport pentru panourile novatek nt36672a, TDO tl070wsh30, Innolux N125HCE-GN1 și ABT Y030XX067A 3.0. Deosebit se remarcă suportul pentru panoul smartphone-urilor OnePlus 6 și 6T, care a permis organizarea încărcării pe dispozitive cu un nucleu nemodificat.
- A fost adăugat suportul pentru primul controler gazdă USB4 discret Intel Maple Ridge.
- A fost adăugat suportul pentru codec-urile audio Allwinner H6 I2S, Analog Devices ADAU1372, Intel Alderlake-S, GMediatek MT8192, NXP i.MX HDMI și XCVR, Realtek RT715 și Qualcomm SM8250.
- A fost adădat suportul pentru platformele ARM, dispozitive și platforme: Galaxy Note 10.1, Microsoft Lumia 950 XL, NanoPi R1, FriendlyArm ZeroPi, Elimo Initium SBC, Broadcom BCM4908, Mediatek MT8192 / MT6779 / MT8167, MStar Infinity2M, Nuvoton NPCM730, Marvell Armada 382, Mikrotik bazat pe Marvell Prestera 98DX3236, servere cu Nuvoton NPCM750 BMC, Kontron i.MX8M Mini, Espressobin Ultra, „Trogdor” Chromebook, Kobol Helios64, Engicam PX30.Core.
- A fost integrat suportul pentru consola de jocuri Ouya bazată pe NVIDIA Tegra 3.
Între timp, Fundația Software-ului Liber din America Latină a formulat o variantă complet liberă a nucleului 5.11 — Linux-libre 5.11-gnu, curat de elemente de firmware și drivere care conțin componente sau porțiuni de cod ne-liber, ale căror domenii de aplicare sunt limitate de producător. În noua versiune, au fost curățate driverele pentru qat_4xxx (crypto), lt9611uxcm (dsi/hdmi bridge), ccs/smia++ (sensor), ath11k_pci, transceiver audio nxp și controller pci mhi. Codul de curățare a bloburilor în driverele și subsistemele amdgpu, btqca, btrtl, btusb, i915 csr a fost actualizat. Noile bloburi în m3 rproc, idt82p33 ptp clock și qualcomm arm64 au fost dezactivate.
Sursa: opennet.ro
