Lansarea nucleului Linux 5.8

După două luni de dezvoltare, Linus Torvalds a prezentat lansarea nucleului Linux 5.8. Dintre cele mai notabile schimbări se numără: detectorul de stări de competiție KCSAN, un mecanism universal de livrare a notificărilor în spațiul utilizatorului, suport pentru echipamentele de criptare inline, mecanisme extinse de securitate pentru ARM64, suport pentru procesorul rus Baikal-T1, posibilitatea de a monta procfs în mod separat, implementarea mecanismelor de securitate Shadow Call Stack și BTI pentru ARM64.

Nucleul 5.8 a devenit cea mai mare versiune în ceea ce privește numărul de modificări din întreaga istorie a proiectului. Aceste modificări nu sunt legate de un singur subsistem, ci acoperă părți diferite ale nucleului și sunt în principal legate de reorganizări interne și curățiri. Cele mai multe modificări se observă în drivere. Noua versiune a acceptat 17606 de corecturi de la 2081 de dezvoltatori, care au afectat aproximativ 20% din toate fișierele din depozitul de cod al nucleului. Dimensiunea patch-ului este de 65 MB (modificările au afectat 16180 de fișiere, s-au adăugat 1043240 de linii de cod, au fost șterse 489854 de linii). Spre comparație, în ramura 5.7 au fost realizate 15033 de corecturi, iar dimensiunea patch-ului a fost de 39 MB. Aproximativ 37% din toate modificările prezentate în 5.8 sunt legate de driverele de dispozitive, aproximativ 16% din modificări se referă la actualizarea codului specific arhitecturilor hardware, 11% sunt legate de stiva de rețea, 3% de sisteme de fișiere, iar 4% de subsistemele interne ale nucleului.

Principalele noutăți:

  • Virtualizare și securitate
    • A fost asigurată blocarea încărcării modulelor nucleului care au secțiuni cu cod în care sunt setate simultan biții care permit execuția și scrierea. Modificarea a fost realizată în cadrul unui proiect mai amplu de eliminare a nucleului de utilizarea paginilor de memorie care permit simultan execuția și scrierea.
    • A apărut posibilitatea creării unor instanțe separate procfs, permițând utilizarea mai multor puncte de montare procfs, montate cu opțiuni diferite, dar reflectând un singur spațiu al identificatorilor proceselor (pid namespace). Anterior, toate punctele de montare procfs oglindeau o singură reprezentare internă iar orice modificare a parametrilor de montare afecta toate celelalte puncte de montare asociate aceluiași spațiu al identificatorilor proceselor. Dintre domeniile în care poate fi solicitată montarea cu opțiuni diferite, se remarcă implementarea izolării ușoare pentru sisteme încorporate, având posibilitatea de a ascunde în procfs anumite tipuri de procese și noduri informaționale.
    • Pentru platforma ARM64 a fost implementat suportul pentru mecanismul
      Shadow-Call Stack, oferit de compilatorul Clang pentru a proteja împotriva suprascrierii adresei de returnare din funcție în caz de suprascriere a buffer-ului în stivă. Esența protecției constă în salvarea adresei de returnare într-o 'stivă umbră' separată după transferul controlului către funcție și recuperarea acestei adrese înainte de ieșirea din funcție.
    • Pentru platforma ARM64 a fost adăugat suportul pentru instrucțiuni ARMv8.5-BTI (Branch Target Indicator) pentru a proteja execuția seturilor de instrucțiuni către care nu ar trebui să se facă salturi în cazul ramificării. Blocarea saltelelor către porțiuni arbitrare de cod este realizată pentru a contracara crearea gadget-urilor în exploate care utilizează tehnici de programare orientată pe returnare (ROP - Return-Oriented Programming, atacatorul nu încearcă să plaseze propriul cod în memorie, ci operează cu fragmentele existente de instrucțiuni de mașină, care se termină cu o instrucțiune de returnare a controlului, din care sunt construite lanțuri de apeluri pentru a obține funcționalitatea dorită).
    • A fost adăugat suport pentru hardware pentru criptarea inline a dispozitivelor bloc (Inline Encryption). Dispozitivele de criptare inline sunt de obicei integrate în unitate, dar sunt logica plasate între memoria sistemului și disc, realizând criptarea și decriptarea transparentă a intrărilor/ișterilor pe baza cheilor și algoritmilor de criptare specificați de nucleu.
    • A fost adăugat parametrul de linie de comandă a nucleului 'initrdmem', care permite specificarea adresei fizice de plasare a initrd în memorie la încărcarea imaginii de boot inițiale în RAM.
    • Au fost adăugate noi capabilități: CAP_PERFMON pentru accesarea subsystemului perf și monitorizarea performanței. CAP_BPF, care permite realizarea unor operații cu BPF (de exemplu, încărcarea programelor BPF), care anterior necesitau drepturi CAP_SYS_ADMIN (acum competențele CAP_SYS_ADMIN sunt împărțite într-o combinație de CAP_BPF, CAP_PERFMON și CAP_NET_ADMIN).
    • A fost adăugat dispozitivul nou virtio-mem, care permite conectarea și deconectarea călduroasă a memoriei la sistemele gazdă.
    • A fost implementat retragerea operațiunilor de mapare în /dev/mem, dacă driverul dispozitivului utilizează zone de memorie suprapuse.
    • A fost adăugată protecția împotriva vulnerabilității CROSSTalk/SRBDS, care permite recuperarea rezultatelor execuției unor instrucțiuni efectuate pe un alt nucleu CPU.
  • Memorie și servicii de sistem
    • În documentul care definește regulile de stil pentru cod, acceptate sunt incluse recomandări cu privire la utilizarea unei terminologii incluzive. Dezvoltatorilor nu li se recomandă să folosească combinațiile „master/slave” și „blacklist/whitelist”, precum și cuvântul „slave” în sine. Recomandările se referă doar la utilizarea nouă a acestor termeni. Mențiunile existente în nucleu ale acestor cuvinte vor rămâne neatinse. În noul cod, utilizarea termenilor marcați este permisă dacă este necesară menținerea API-ului și ABI-ului expus în spațiul utilizatorului, precum și la actualizarea codului pentru a susține hardware-ul existent sau protocoalele, specificațiile cărora impun utilizarea unor termeni definiți.
    • A fost inclus unealta de depanare KCSAN (Kernel Concurrency Sanitizer), destinată identificării dinamice stărilor de competiție între nucleu. Utilizarea KCSAN este suportată la compilarea cu GCC și Clang și necesită adăugarea unor modificări speciale în timpul procesului de compilare pentru a urmări accesul la memorie (sunt folosite puncte de oprire care se activează la citirea sau modificarea memoriei). Principalul accent în dezvoltarea KCSAN a fost prevenirea alarmelor false, scalabilitatea și ușurința de utilizare.
    • Adăugat un mecanism universal notificărilor de la nucleu către spațiul utilizatorului. Mecanismul se bazează pe driverul pipe standard și permite distribuirea eficientă a notificărilor de la nucleu pe canalele deschise în spațiul utilizatorului. Punctele de recepție a notificărilor sunt pipe-uri deschise într-un mod special, permițând acumularea mesajelor primite de la nucleu în buffer-ul circular. Citirea se realizează cu ajutorul funcției obișnuite read(). Proprietarul canalului determină care dintre sursele din nucleu trebuie monitorizate și poate stabili un filtru pentru a ignora mesajele și evenimentele de un anumit tip. Printre evenimente sunt acceptate până acum doar operațiuni cu chei, cum ar fi adăugarea/ștergerea cheilor și modificarea atributelor acestora. Evenimentele specificate sunt planificate pentru utilizare în GNOME.
    • A fost continuată dezvoltarea funcționalității 'pidfd', care ajută la gestionarea situațiilor de reutilizare a PID (pidfd se leagă de un proces specific și nu se schimbă, în timp ce PID-ul poate fi asociat cu un alt proces după terminarea procesului curent asociat cu acest PID). În noua versiune a fost adăugată suport pentru utilizarea pidfd pentru atașarea procesului la spațiile de nume (se permite specificarea pidfd la apelul de sistem setns). Utilizarea pidfd permite gestionarea atașării unui proces la mai multe tipuri de spații de nume cu un singur apel, reducând semnificativ numărul apelurilor de sistem necesare și implementând atașarea în mod atomic (dacă apare o eroare la atașarea la unul dintre spațiile de nume, atunci nu se va atașa niciunul dintre celelalte).
    • A fost adăugat un nou apel de sistem faccessat2(), care se deosebește de
      faccessat() printr-un argument suplimentar cu flaguri corespunzătoare recomandărilor POSIX (anterior, aceste flaguri erau emulate în biblioteca C, iar noul faccessat2 permite implementarea acestora în nucleu).
    • În Cgroup a fost adăugată setarea memory.swap.high, care poate fi utilizată pentru a încetini sarcinile care ocupă prea mult spațiu în secțiunea de swap.
    • În interfața de intrare/ieșire asincronă io_uring a fost adăugată suportul pentru apelul de sistem tee().
    • A fost adăugat un mecanism „BPF iterator, destinat pentru a extrage în spațiul utilizatorului conținutul structurilor nucleului.
    • A fost adăugată posibilitatea utilizării unui buffer circular pentru schimbul de date între programele BPF.
    • În mecanismul padata, destinat pentru organizarea execuției paralele a sarcinilor în nucleu, a fost adăugată suport pentru sarcini multi-threading cu balansare de sarcină.
    • În mecanismul pstore, care permite păstrarea informațiilor de depanare privind cauza prăbușirii în zona de memorie, fără a fi pierdute între reîncărcări, adăugat backend pentru salvarea informațiilor pe dispozitivele de stocare bloc.
    • Din ramura nucleului PREEMPT_RT a fost transferată implementarea blocărilor locale.
    • Adăugat un nou API pentru alocarea bufferelor (AF_XDP), destinat să simplifice scrierea de drivere de rețea cu suport XDP (eXpress Data Path).
    • Pentru arhitectura RISC-V a fost implementat suport pentru depanarea componentelor nucleului prin KGDB.
    • Până la versiunea 4.8, cerințele pentru versiunea GCC care poate fi utilizată pentru compilarea nucleului au fost crescute. Într-una dintre versiunile următoare se plănuiește creșterea pragului la GCC 4.9.
  • Subsistemul de disc, I/O și sistemele de fișiere
    • În Device Mapper adăugat a fost adăugat un nou handler dm-ebs (emulate block size), care poate fi folosit pentru a emula o dimensiune mai mică a blocului logic (de exemplu, pentru a emula sectoare de 512 octeți pe discuri cu dimensiunea sectorului de 4K).
    • În sistemul de fișiere F2FS a fost adăugat suport pentru compresie utilizând algoritmul LZO-RLE.
    • În dm-crypt a fost adăugată suport pentru chei criptate.
    • În Btrfs a fost îmbunătățită gestionarea operațiunilor de citire în modul direct I/O. La montare accelerată verificarea subdirectoarelor și directorilor îndepărtați, care nu mai au părinte.
    • În CIFS a fost adăugat parametrul „nodelete”, care permite verificările standard ale drepturilor pe server, dar interzice clientului să șteargă fișiere sau directoare.
    • În Ext4 a fost îmbunătățită gestionarea erorii ENOSPC în utilizarea multithreading-ului. În xattr a fost adăugat suport pentru spațiul de nume gnu.*, utilizat în GNU Hurd.
    • Pentru Ext4 și XFS a fost inclus suport pentru operațiunile DAX (acces direct la FS fără a utiliza cache-ul de pagini, fără a aplica nivelul dispozitivelor de bloc) legat de fișiere și directoare individuale.
    • În apelul sistemic statx() a fost adăugat un flag STATX_ATTR_DAX, indicând care informația este extrasă folosind mecanismul DAX.
    • În EXFAT a fost adăugată suport pentru verificarea zonei de boot.
    • În FAT îmbunătățită preîncărcarea elementelor FS. Testarea unei unități USB de 2TB lentă a arătat o reducere a timpului de trecere a testului de la 383 la 51 sec.
  • Subsystema de rețea
    • În codul de gestionare a funcționării podurilor de rețea a fost adăugată suport pentru protocolul MRP (Media Redundancy Protocol), care permite asigurarea redundanței, închizând mai multe comutatoare Ethernet.
    • În sistemul de gestionare a traficului (Tc) adăugat o nouă acțiune „gate”, care oferă posibilitatea de a determina intervalele de timp pentru procesarea și eliminarea anumitor pachete.
    • În kernel și utilitarul ethtool a fost adăugată suport pentru funcțiile de testare a cablului de rețea conectat și autodiagnosticare a dispozitivelor de rețea.
    • În stiva IPv6 a fost adăugată suport pentru algoritmul MPLS (Multiprotocol Label Switching) pentru rutarea pachetelor utilizând comutarea multiprotocol pe etichete (pentru IPv4 MPLS a fost suportat și anterior).
    • A fost adăugat suport pentru transmiterea pachetelor IKE (Internet Key Exchange) și IPSec peste TCP (RFC 8229) pentru a evita eventualele blocări UDP.
    • A fost adăugat dispozitiv de blocare a rețelei rnbd, care permite organizarea accesului de la distanță la un dispozitiv de blocare prin transport RDMA (InfiniBand, RoCE, iWARP) și protocolul RTRS.
    • În stiva TCP a fost adăugată support pentru comprimarea intervalelor în răspunsurile de recunoaștere selectivă (selective acknowledgment, SACK).
    • Pentru IPv6 a fost implementată support TCP-LD (RFC 6069, Disruptions Long Connectivity).
  • Echipament
    • În driverul DRM i915 pentru plăcile grafice Intel, suportul pentru cipurile Intel Tiger Lake (GEN12) este activat implicit, pentru care se adaugă și a fost implementată posibilitatea utilizării sistemului SAGV (System Agent Geyserville) pentru ajustarea dinamică a frecvenței și tensiunii în funcție de cerințele de consum de energie sau performanță.
    • În driverul amdgpu a fost adăugat suport pentru formatul de pixel FP16 și implementată posibilitatea de a lucra cu bufere criptate în memoria video (TMZ, Trusted Memory Zone).
    • A fost adăugat suport pentru senzorii de consum de energie ai procesoarelor AMD Zen și Zen2, precum și pentru senzorii de temperatură AMD Ryzen 4000 Renoir. Pentru AMD Zen și Zen2 a fost asigurat suport pentru extragerea informațiilor despre consumul de energie prin intermediul interfeței RAPL (Running Average Power Limit).
    • În driverul Nouveau a fost adăugat suport pentru formatul modificatorilor NVIDIA. Pentru gv100 a fost implementată posibilitatea de utilizare a modurilor de scanare interlaced. A fost adăugată definiția vGPU.
    • În driverul MSM (Qualcomm) a fost adăugat suport pentru GPU Adreno A405, A640 și A650.
    • Adăugat framework intern pentru gestionarea resurselor DRM (Direct Rendering Manager).
    • A fost adăugat suport pentru smartphone-urile Xiaomi Redmi Note 7 și Samsung Galaxy S2, precum și pentru laptopurile Elm/Hana Chromebook.
    • Au fost adăugate drivere pentru panouri LCD: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • A fost adăugat suport pentru plăci ARM și platforme Renesas „RZ/G1H”, Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchip 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.
    • A fost adăugată suportul pentru procesorul MIPS Loongson-2K (abreviat Loongson64). Suport pentru CPU Loongson 3 a fost adăugat prin utilizarea hypervisor-ului KVM.
    • Adăugat
      suport pentru procesorul rus Baikal-T1 și sistemul pe chip bazat pe acesta BE-T1000. Procesorul Baikal-T1 conține două nuclee superscalare P5600 MIPS 32 r5, funcționând la o frecvență de 1.2 GHz. Chipul dispune de cache L2 (1 MB), controler de memorie DDR3-1600 ECC, 1 port 10Gb Ethernet, 2 porți 1Gb Ethernet, controler PCIe Gen.3 x4, 2 porți SATA 3.0, USB 2.0, GPIO, UART, SPI, I2C. Procesorul oferă suport hardware pentru virtualizare, instrucțiuni SIMD și un accelerator hardware integrat pentru operațiuni criptografice, care suportă GOST 28147-89. Chipul a fost dezvoltat utilizând un nucleu procesor MIPS32 P5600 Warrior licențiat de Imagination Technologies.

În același timp, fundația latino-americană a software-ului liber a formulat
o variantă kernel 5.8 complet liber — Linux-libre 5.8-gnu, curățat de elemente de firmware și drivere care conțin componente sau porțiuni de cod nelibere, a căror utilizare este restricționată de producător. În noua lansare, încărcarea blob-urilor în driverele pentru 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 și I2C EEPROM Slave a fost dezactivată. A fost actualizat codul pentru curățarea blob-urilor în drivere și subsistemele Adreno GPU, HabanaLabs Goya, touchscreen x86, vt6656 și btbcm.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster