Lansarea kernel-ului Linux 6.2

După două luni de dezvoltare, Linus Torvalds a prezentat lansarea kernel-ului Linux 6.2. Printre cele mai notabile schimbări se numără: acceptarea codului sub licența Copyleft-Next, îmbunătățirea implementării RAID5/6 în Btrfs, continuarea integrării suportului pentru limbajul Rust, reducerea costurilor indirecte în protecția împotriva atacurilor Retbleed, adăugarea posibilității de reglementare a consumului de memorie în scrierea inversă, un mecanism de echilibrare a sarcinii (PLB - Protective Load Balancing) pentru TCP, un mecanism hibrid de protecție a fluxului de execuție a comenzilor (FineIBT), posibilitatea de a defini propriile obiecte și structuri de date în BPF, includerea utilitarului rv (Runtime Verification) și reducerea consumului de energie în implementarea blocajelor RCU.

Noua versiune a acceptat 16843 de corecturi de la 2178 de dezvoltatori, dimensiunea patch-ului fiind de 62 MB (modificările au afectat 14108 fișiere, s-au adăugat 730195 de linii de cod și s-au eliminat 409485 de linii). Aproape 42% din toate modificările prezentate în 6.2 sunt legate de driverele de dispozitive, aproximativ 16% din modificări au legătură cu actualizarea codului specific arhitecturilor hardware, 12% sunt legate de stiva de rețea, 4% de sistemele de fișiere și 3% de subsistemele interne ale kernel-ului.

Noutățile principale din kernel-ul 6.2:

  • Memorie și servicii de sistem
    • Acceptarea includerii în kernel a codului și modificărilor furnizate sub licența Copyleft-Next 0.3.1. Licența Copyleft-Next a fost creată de unul dintre autorii GPLv3 și este complet compatibilă cu licența GPLv2, acest lucru fiind confirmat de avocații companiilor SUSE și Red Hat. Comparativ cu GPLv2, licența Copyleft-Next este semnificativ mai concisă și mai ușor de înțeles (introducerea și menționarea compromisurilor învechite au fost eliminate), definește termenele și procedurile pentru remedieri, și elimină automat cerințele de copyleft pentru lucrări învechite care au mai mult de 15 ani.

      Copyleft-Next conține de asemenea o clauză privind acordarea drepturilor pentru tehnologiile brevetate, ceea ce, spre deosebire de GPLv2, face această licență compatibilă cu licența Apache 2.0. Pentru a asigura compatibilitatea completă cu GPLv2, în textul Copyleft-Next se precizează clar că lucrările derivate pot fi furnizate nu doar sub licența de bază Copyleft-Next, ci și sub licența GPL.

    • Pachetul include utilitarul „rv”, care oferă o interfață pentru interacțiunea din spațiul utilizatorului cu handler-ele subsistemului RV (Runtime Verification), destinat verificării corectitudinii funcționării în sisteme de înaltă fiabilitate care garantează absența erorilor. Verificarea se efectuează în timpul execuției prin atașarea handler-elor la punctele de trasare, comparând parcursul efectiv al execuției cu un model determinist de referință prestabilit, care definește comportamentul așteptat al sistemului.
    • În dispozitivul zRAM, care permite stocarea unei partiții de swap în memorie într-o formă comprimată (se creează un dispozitiv de bloc în memorie unde se realizează swapping cu compresie), a fost implementată posibilitatea de recompresare a paginilor utilizând un algoritm alternativ pentru a obține un nivel mai ridicat de compresie. Ideea principală este de a oferi alegerea între mai multe algoritme (lzo, lzo-rle, lz4, lz4hc, zstd), care oferă propriile compromisuri între viteza de compresie/decompresie și nivelul de compresie sau optimizări în situații speciale (de exemplu, pentru comprimarea paginilor mari de memorie).
    • API-ul „iommufd” a fost adăugat pentru gestionarea din spațiul utilizatorului a sistemului de gestionare a memoriei de intrare-ieșire — IOMMU (I/O Memory-Management Unit). Noua API oferă posibilitatea de a gestiona tabelele de pagini de memorie de intrare/ieșire, utilizând descriptorii de fișiere.
    • În BPF a fost oferită posibilitatea de a crea tipuri, de a defini obiecte proprii, de a construi propria ierarhie de obiecte și de a forma structuri de date flexibile, cum ar fi listele legate. Pentru programele BPF care intră în modul de somn (BPF_F_SLEEPABLE) a fost adăugată suportul pentru blocările bpf_rcu_read_{,un}lock(). A fost implementat suportul pentru salvarea obiectelor task_struct. A fost adăugat tipul de hartă BPF_MAP_TYPE_CGRP_STORAGE, care oferă un depozit local pentru cgroups.
    • Pentru mecanismul de blocare RCU (Read-copy-update) a fost implementat un mecanism opțional de apeluri callback „leneșe”, în care, pe baza unui timer, mai multe apeluri callback sunt procesate simultan. Aplicarea optimizării propuse permite o reducere de 5-10% a consumului de energie pe dispozitivele Android și ChromeOS prin amânarea cererilor RCU în timpul inactivității sau al unei sarcini scăzute asupra sistemului.
    • A fost adăugat sysctl split_lock_mitigate pentru a controla reacția sistemului la detectarea blocărilor împărțite („split lock”), care apar la accesarea datelor nealiniate în memorie din cauza faptului că, în timpul executării unei instrucțiuni atomice, datele traversează două linii de cache ale CPU. Astfel de blocări duc la o scădere semnificativă a performanței. Când valoarea split_lock_mitigate este setată la 0, este afișat doar un avertisment cu privire la problemă, iar când este setată la 1, pe lângă afișarea avertismentului, se încetinește și procesul care a provocat blocarea, pentru a menține performanța sistemului în rest.
    • Pentru arhitectura PowerPC a fost propusă o nouă implementare a blocărilor qspinlock, care demonstrează o performanță mai bună și rezolvă unele probleme cu blocările apărute în cazuri excepționale.
    • Codul de procesare a întreruperilor MSI (Message-Signaled Interrupts) a fost revizuit, rezolvând problemele arhitecturale acumulate și adăugând suport pentru asocierea handlerilor individuali cu diferite dispozitive.
    • Pentru sistemele bazate pe arhitectura setului de instrucțiuni LoongArch, utilizată în procesoarele Loongson 3 5000 și care implementează un nou RISC ISA, similar cu MIPS și RISC-V, s-a implementat suport pentru ftrace, protecția stivei, precum și modul de somn și așteptare.
    • A fost oferită posibilitatea de a atribui nume domeniilor de memorie partajată anonimă (anterior, numele puteau fi atribuite doar memoriei anonime private, legate de un anumit proces).
    • A fost adăugat un nou parametru în linia de comandă a nucleului „trace_trigger”, destinat activării unui declanșator de trasare, utilizat pentru asocierea comenzilor condiționate, apelate la declanșarea unui control (de exemplu, trace_trigger=„sched_switch.stacktrace if prev_state == 2”).
    • Cerințele pentru versiunea pachetului binutils au fost ridicate. Acum, pentru a compila nucleul, este necesar cel puțin binutils 2.25.
    • La apelarea exec(), a fost adăugată posibilitatea de a plasa procesul în spațiul de nume de timp (time namespace), în care timpul diferă de cel al sistemului.
    • A început transferul din ramura Rust-for-Linux a funcționalității suplimentare legate de utilizarea limbajului Rust ca al doilea limbaj pentru dezvoltarea driverelor și modulelor din nucleu. Suportul pentru Rust este inactiv implicit și nu duce la includerea Rust în lista dependențelor de compilare obligatorii pentru nucleu. Funcționalitatea de bază propusă în ediția anterioară a fost extinsă cu capacități pentru suportul codului de nivel jos, cum ar fi tipul Vec și macro-urile pr_debug!(), pr_cont!() și pr_alert!(), precum și macro-ul procedural „#[vtable]”, care simplifică lucrul cu tabelele de pointeri la funcții. Adăugarea de înveliri Rust de nivel înalt deasupra subsistemelor nucleului, care vor permite crearea de drivere complete în Rust, este așteptată în edițiile viitoare.
    • Tipul „char” utilizat în nucleu este acum declarat implicit ca fiind fără semn pentru toate arhitecturile.
    • Mecanismul de distribuție a memoriei slab - SLOB (alocare slabă) este declarat învechit; acesta a fost proiectat pentru sisteme cu o cantitate mică de memorie. În loc de SLOB, se recomandă utilizarea SLUB sau SLAB în condiții normale. Pentru sistemele cu o cantitate mică de memorie, se recomandă aplicarea SLUB în modul SLUB_TINY.
  • Subsistemul de disc, I/O și sistemele de fișiere
    • În Btrfs au fost aduse îmbunătățiri menite să rezolve problema „write hole” în implementarea RAID 5/6 (încercarea de recuperare a RAID-ului când o defecțiune apare în timpul scrierii și nu se poate înțelege ce bloc a fost scris corect pe care dintre dispozitivele RAID, ceea ce poate duce la distrugerea blocurilor corespunzătoare blocurilor neînregistrate). În plus, pentru SSD-uri, acum se activează implicit, atunci când este posibil, execuția asincronă a operației „discard”, permițând obținerea unei performanțe mai mari datorită grupării eficiente a operațiilor „discard” în coadă și procesării acesteia de către un handler de fundal. Performanța operațiilor send și lseek a fost, de asemenea, îmbunătățită, precum și ioctl FIEMAP.
    • Funcționalitățile de gestionare a scrierii întârziate (writeback, salvarea în fundal a datelor modificate) pentru dispozitivele bloc sunt extinse. În anumite situații, de exemplu, atunci când se utilizează dispozitive bloc în rețea sau unități USB, scrierea întârziată poate duce la un consum mare de memorie RAM. Pentru a gestiona comportamentul scrierii întârziate și a menține dimensiunea cache-ului pe pagină în limite specifice în sysfs (\/sys\/class\/bdi\/), au fost propuse noi parametri strict_limit, min_bytes, max_bytes, min_ratio_fine și max_ratio_fine.
    • În sistemul de fișiere F2FS a fost implementată operația ioctl de înlocuire atomică, care permite scrierea datelor într-un fișier ca parte a unei operațiuni atomice. De asemenea, în F2FS a fost adăugat un cache bloc extents care ajută la identificarea datelor utilizate activ sau a datelor la care nu s-a accesat de mult timp.
    • În FS ext4 se observă doar corectarea erorilor.
    • În sistemul de fișiere ntfs3 au fost propuse mai multe noi opțiuni de mount: „nocase” pentru gestionarea sensibilității la litere în numele fișierelor și directoarelor; windows_name pentru a interzice crearea numelor de fișiere care conțin caractere nepermise de sistemul de operare Windows; hide_dot_files pentru a gestiona atribuirea etichetei de fișiere ascunse pentru fișierele care încep cu un punct.
    • În sistemul de fișiere Squashfs a fost implementată opțiunea de mount „threads=”, prin care se poate specifica numărul de thread-uri pentru paralelizarea operațiunilor de decompresie. În Squashfs a apărut, de asemenea, posibilitatea de mapare a identificatorilor utilizatorilor de pe sistemele de fișiere montate, utilizată pentru a corela fișierele unui utilizator pe o partiție străină montată cu un alt utilizator în sistemul curent.
    • Implementarea listelor de control al accesului POSIX (POSIX ACL) a fost reproiectată. În noua implementare au fost eliminate problemele arhitecturale, s-a simplificat întreținerea codului și s-au utilizat tipuri de date mai sigure.
    • În subsistemul fscrypt, utilizat pentru criptarea transparentă a fișierelor și directoarelor, a fost adăugată suport pentru algoritmul de criptare SM4 (standardul chinezesc GB\/T 32907-2016).
    • A fost oferită posibilitatea compilării nucleului fără suport pentru NFSv2 (în viitor, se preconizează că suportul pentru NFSv2 va fi complet abandonat).
    • Organizarea verificării drepturilor de acces la dispozitivele NVMe a fost modificată. A fost oferită posibilitatea de citire și scriere pe dispozitivul NVMe, dacă procesul de scriere are acces la un fișier special al dispozitivului (anterior, procesul trebuia să aibă privilegiul CAP_SYS_ADMIN).
    • Driverul de tip batch pentru CD/DVD a fost eliminat, deoarece a fost declarat învechit în 2016.
  • Virtualizare și securitate
    • A fost implementată o nouă metodă de protecție împotriva vulnerabilității Retbleed pentru CPU-urile Intel și AMD, utilizând urmărirea adâncimii apelurilor, ceea ce nu încetinește activitatea atât de mult ca protecția existentă anterior împotriva Retbleed. Pentru a activa noul mod, a fost propus un parametru în linia de comandă a nucleului «retbleed=stuff».
    • A fost adăugat un mecanism hibrid de protecție a fluxului de execuție a comenzilor FineIBT, care combină utilizarea instrucțiunilor hardware Intel IBT (Indirect Branch Tracking) și protecția software kCFI (kernel Control Flow Integrity) pentru a bloca încălcarea ordinii normale de execuție (control flow) ca urmare a utilizării exploitable-urilor care alterează pointerii funcțiilor stocați în memorie. FineIBT permite execuția prin salt indirect doar în cazul în care se sări la instrucțiunea ENDBR, care este plasată la începutul funcției. În plus, similar mecanismului kCFI, se efectuează o verificare a hash-urilor, care garantează nealterarea pointerilor.
    • Au fost adăugate restricții pentru a bloca atacurile care manipulează generarea stărilor «oops», după care sarcinile problematice sunt terminate și starea este restaurată fără a opri funcționarea sistemului. În caz de apeluri foarte numeroase ale stării «oops» apare o depășire a contorului de referință (refcount), ceea ce permite exploatarea vulnerabilităților cauzate de dereferințele pointerilor NULL. Pentru a proteja împotriva acestor atacuri, în nucleu a fost adăugat un limită pentru numărul maxim de ciocniri «oops», după depășirea căruia nucleul va iniția trecerea în starea «panic» cu o repornire ulterioară, ceea ce nu va permite obținerea numărului de iterații necesar pentru depășirea refcount-ului. În mod implicit, limita este setată la 10.000 de «oops», dar poate fi modificată dorind prin parametrul oops_limit.
    • A fost adăgată o opțiune de configurare LEGACY_TIOCSTI și sysctl legacy_tiocsti pentru a dezactiva posibilitatea de a introduce date în terminal folosind ioctl TIOCSTI, deoarece această funcționalitate poate fi utilizată pentru a introduce caractere arbitrare în bufferul de intrare al terminalului și a simula introducerea de către utilizator.
    • A fost propus un nou tip de structuri interne encoded_page, în care biții inferiori ai pointerului sunt utilizați pentru a stoca informații suplimentare folosite pentru a proteja împotriva dereferentierii accidentale a pointerului (când este nevoie cu adevărat de dereferentiere, aceste biți suplimentari trebuie mai întâi curățați).
    • Pe platforma ARM64, în etapa de boot, s-a oferit posibilitatea activării și dezactivării implementării software a mecanismului Shadow Stack, utilizat pentru a proteja împotriva rescrierii adresei de returnare din funcție în cazul unei suprascrieri a bufferului pe stivă (protecția constă în salvarea adresei de returnare într-o stivă separată "tăiată" după transferul controlului către funcție și extragerea acestei adrese înainte de ieșirea din funcție). Suportul pentru implementarea hardware și software a Shadow Stack într-un singur nucleu permite utilizarea aceluiași nucleu pe diferite sisteme ARM, independent de suportul pentru instrucțiunile de autentificare a pointerilor. Activarea implementării software se face prin substituirea instrucțiunilor necesare în cod în timpul încărcării.
    • A fost adăugat suport pentru folosirea mecanismului de notificare asynchronă la ieșire (asynchronous exit notification) pe procesoarele Intel, care permite identificarea atacurilor de tip single-step asupra codului executat în enclavele SGX.
    • A fost propus un set de operațiuni care permit hipervizorului să gestioneze cererile din sistemele gazdă Intel TDX (Trusted Domain Extensions).
    • Au fost eliminate opțiunile de configurare a nucleului RANDOM_TRUST_BOOTLOADER și RANDOM_TRUST_CPU, iar în locul acestora trebuie folosite opțiunile corespunzătoare ale liniei de comandă random.trust_bootloader și random.trust_cpu.
    • Mecanismul Landlock, care permite restricționarea interacțiunii unui grup de procese cu mediul extern, a fost extins cu suport pentru flacul LANDLOCK_ACCESS_FS_TRUNCATE, care oferă posibilitatea de a controla executarea operațiunilor de trunchiere a fișierelor.
  • Subsystema de rețea
    • Pentru IPv6 a fost adăugată suportul pentru PLB (Protective Load Balancing), un mecanism de echilibrare a încărcăturii între link-urile de rețea, destinat să reducă punctele de suprasarcină pe comutatoarele centrelor de date. Prin modificarea etichetei de flux IPv6, PLB schimbă aleatoriu căile pachetelor pentru a echilibra încărcătura pe porturile comutatorului. Pentru a reduce reordonarea pachetelor, această operațiune este efectuată, dacă este posibil, după perioadele de inactivitate (idle). Aplicarea PLB în centrele de date Google a permis reducerea dezechilibrului de încărcătură pe porturile comutatoarelor, în medie cu 60%, o reducere a pierderii de pachete cu 33% și o diminuare a întârzierilor cu 20%.
    • A fost adăugat un driver pentru dispozitive MediaTek cu suport pentru Wi-Fi 7 (802.11be).
    • A fost adăugat suport pentru linkuri de 800 de gigabiți.
    • A fost adăugată capacitatea de a redenumi interfețele de rețea în mod dinamic, fără a opri funcționarea acestora.
    • În mesajele de logare referitoare la atacurile de tip SYN-flood a fost adăugată mențiunea despre adresa IP la care a fost primit pachetul.
    • Pentru UDP a fost implementată posibilitatea de utilizare a unor tabele hash separate pentru diferite spații de nume de rețea.
    • Pentru punțile de rețea a fost implementat suportul pentru metoda de autentificare MAB (MAC Authentication Bypass).
    • Pentru protocolul CAN (CAN_RAW) a fost implementat suportul pentru modul de socket SO_MARK, care permite atașarea filtrelor de trafic pe baza fwmark.
    • În ipset a fost introdus un nou parametrul bitmask, care permite setarea unei măști bazate pe biți arbitrar în adresă IP (de exemplu, „ipset create set1 hash:ip bitmask 255.128.255.0”).
    • În nf_tables a fost adăugat suportul pentru procesarea antetelor interne (inner) care vin în interiorul pachetelor tunelabile.
  • Echipament
    • A fost adăugată subsistemul „accel” cu implementarea unui cadru pentru acceleratoare de calcul, care pot fi furnizate atât sub formă de ASIC-uri individuale, cât și sub formă de blocuri IP în interiorul SoC și GPU. Aceste acceleratoare sunt destinate în principal accelerării soluționării problemelor de învățare automată.
    • În driver-ul amdgpu a fost inclus suportul pentru componentele IP GC, PSP, SMU și NBIO. Pentru sistemele ARM64 a fost adăugat suportul pentru DCN (Display Core Next). Implementarea output-ului securizat pe ecran a fost actualizată de la DCN10 la DCN21 și poate acum fi utilizată atunci când sunt conectate mai multe ecrane.
    • În driver-ul i915 (Intel) a fost stabilizată suportul pentru plăcile grafice discrete Intel Arc (DG2/Alchemist).
    • În driver-ul Nouveau a fost implementat suportul pentru GPU NVIDIA GA102 (RTX 30) bazat pe arhitectura Ampere. Pentru plăcile nva3 (GT215) a fost adăugată posibilitatea de a controla iluminarea din fundal.
    • A fost adăugat suport pentru adaptoare wireless bazate pe cipuri Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) și MediaTek MT7996, interfețe Bluetooth Broadcom BCM4377/4378/4387, precum și controle Ethernet Motorcomm yt8521, NVIDIA Tegra GE.
    • A fost adăugat suport pentru ASoC (ALSA System on Chip) pentru cipurile audio integrate HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. A fost adăugat suport pentru interfața audio Focusrite Saffire Pro 40. A fost adăugat codec audio Realtek RT1318.
    • A fost adăugat suport pentru smartphone-uri și tablete Sony (Xperia 10 IV, 5 IV, X și X compact, OnePlus One, 3, 3T și Nord N100, Xiaomi Poco F1 și Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1).
    • A fost adăugat suport pentru ARM SoC și plăcile Apple T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460), SM6375 (Snapdragon 695), SDM670 (Snapdragon 670), MSM8976 (Snapdragon 652), MSM8956 (Snapdragon 650), RK3326 Odroid-Go/rg351, Zyxel NSA310S, InnoComm i.MX8MM, Odroid Go Ultra.

În același timp, Fondul Latino-American pentru Software Liber a creat o variantă complet liberă a nucleului 6.2 — Linux-libre 6.2-gnu, curățată de elementele de firmware și drivere care conțin componente nesigure sau porțiuni de cod, a căror utilizare este restricționată de către producător. În această nouă versiune a fost efectuată o curățare a bloburilor noi în driverul nouveau. A fost dezactivată încărcarea bloburilor în driverul mt7622, mt7996 wifi și bcm4377 bluetooth. A fost curățat numele bloburilor în fișierele dts pentru arhitectura Aarch64. A fost actualizat codul de curățare a bloburilor în diferite drivere și subsisteme. Curățarea driverului s5k4ecgx a fost oprită, deoarece acesta a fost eliminat din nucleu.

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