Lansarea nucleului Linux 6.2

După două luni de dezvoltare, Linus Torvalds a prezentat lansarea nucleului Linux 6.2. Printre cele mai notabile modificări: este permisă acceptarea codului sub licența Copyleft-Next, implementarea RAID5/6 în Btrfs este îmbunătățită, continuă integrarea suportului pentru limbajul Rust, costul general al protecției împotriva atacurilor Retbleed este redus, se adaugă capacitatea de a regla consumul de memorie în timpul scrierii înapoi, se adaugă un mecanism pentru echilibrarea TCP PLB (Protective Load Balancing), a fost adăugat un mecanism hibrid de protecție a fluxului de comandă (FineIBT), BPF are acum capacitatea de a-și defini propriile obiecte și structuri de date , este inclusă utilitatea rv (Runtime Verification), consumul de energie în implementarea încuietorilor RCU a fost redus.

Noua versiune include 16843 de corecții de la 2178 de dezvoltatori, dimensiunea patch-ului este de 62 MB (modificările au afectat 14108 fișiere, au fost adăugate 730195 de linii de cod, 409485 de linii au fost șterse). Aproximativ 42% din toate modificările introduse în 6.2 sunt legate de driverele de dispozitiv, aproximativ 16% dintre modificări sunt legate de actualizarea codului specific arhitecturilor hardware, 12% sunt legate de stiva de rețea, 4% sunt legate de sistemele de fișiere și 3% sunt legate de subsistemele interne ale nucleului.

Inovații cheie în nucleul 6.2:

  • Servicii de memorie și sistem
    • Este permisă includerea în codul kernelului și a 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 pe deplin compatibilă cu licența GPLv2, după cum au confirmat avocații de la SUSE și Red Hat. În comparație cu GPLv2, licența Copyleft-Next este mult mai compactă și mai ușor de înțeles (partea introductivă și mențiunea compromisurilor învechite au fost eliminate), definește intervalul de timp și procedura pentru eliminarea încălcărilor și elimină automat cerințele copyleft pentru software-ul învechit care are mai mult de 15 ani.

      Copyleft-Next conține, de asemenea, o clauză de acordare a tehnologiei proprietare, care, spre deosebire de GPLv2, face această licență compatibilă cu licența Apache 2.0. Pentru a asigura compatibilitatea deplină cu GPLv2, Copyleft-Next afirmă în mod explicit că o lucrare derivată poate fi distribuită sub licența GPL în plus față de licența originală Copyleft-Next.

    • Structura include utilitarul „rv”, care oferă o interfață pentru interacțiunea din spațiul utilizatorului cu handlerii subsistemului RV (Runtime Verification), menit să verifice funcționarea corectă pe sisteme extrem de fiabile care garantează absența defecțiunilor. Verificarea se realizează în timpul execuției prin atașarea handler-urilor la punctele de urmărire care verifică progresul real al execuției față de un model determinist de referință predeterminat al mașinii care definește comportamentul așteptat al sistemului.
    • Dispozitivul zRAM, care permite ca partiția de swap să fie stocată în memorie într-o formă comprimată (un dispozitiv bloc este creat în memorie la care schimbul se realizează prin compresie), implementează capacitatea de a reambala paginile folosind un algoritm alternativ pentru a atinge un nivel superior de compresie. Ideea principală este de a oferi o alegere între mai mulți algoritmi (lzo, lzo-rle, lz4, lz4hc, zstd), oferind propriile compromisuri între viteza de compresie/decompresie și nivelul de compresie, sau optimi în situații speciale (de exemplu, pentru comprimarea mari). pagini de memorie).
    • S-a adăugat API-ul „iommufd” pentru gestionarea sistemului de gestionare a memoriei I/O - IOMMU (I/O Memory-Management Unit) din spațiul utilizatorului. Noul API face posibilă gestionarea tabelelor de pagini de memorie I/O folosind descriptori de fișiere.
    • BPF oferă posibilitatea de a crea tipuri, de a vă defini propriile obiecte, de a vă construi propria ierarhie de obiecte și de a crea în mod flexibil propriile structuri de date, cum ar fi listele legate. Pentru programele BPF care intră în modul de repaus (BPF_F_SLEEPABLE), a fost adăugat suport pentru blocările bpf_rcu_read_{,un}lock(). S-a implementat suport pentru salvarea obiectelor task_struct. S-a adăugat tipul de hartă BPF_MAP_TYPE_CGRP_STORAGE, oferind stocare locală pentru cgroups.
    • Pentru mecanismul de blocare RCU (Read-copy-update), este implementat un mecanism opțional de apeluri de apel invers „lene”, în care mai multe apeluri de apel invers sunt procesate simultan folosind un temporizator în modul batch. Aplicarea optimizării propuse ne permite să reducem consumul de energie pe dispozitivele Android și ChromeOS cu 5-10% prin amânarea solicitărilor RCU în timpul inactiv sau încărcarea scăzută a sistemului.
    • S-a adăugat sysctl split_lock_mitigate pentru a controla modul în care sistemul reacționează atunci când detectează blocări divizate care apar atunci când accesează date nealiniate din memorie din cauza datelor care traversează două linii de memorie cache a CPU atunci când execută o instrucțiune atomică. Astfel de blocaje duc la o scădere semnificativă a performanței. Setarea split_lock_mitigate la 0 emite doar un avertisment că există o problemă, în timp ce setarea split_lock_mitigate la 1 determină și procesul care a determinat încetinirea blocării pentru a păstra performanța pentru restul sistemului.
    • A fost propusă o nouă implementare a qspinlock pentru arhitectura PowerPC, care demonstrează performanțe mai mari și rezolvă unele probleme de blocare care apar în cazuri excepționale.
    • Codul de gestionare a întreruperilor MSI (Message-Signled Interrupts) a fost reproiectat, eliminând problemele arhitecturale acumulate și adăugând suport pentru legarea handlerelor individuale la diferite dispozitive.
    • Pentru sistemele bazate pe arhitectura setului de instrucțiuni LoongArch utilizată în procesoarele Loongson 3 5000 și care implementează noul RISC ISA, similar cu MIPS și RISC-V, este implementat suportul pentru modurile ftrace, stack protection, sleep și standby.
    • A fost oferită capacitatea de a atribui nume zonelor de memorie anonimă partajată (anterior, numele puteau fi atribuite doar memoriei anonime private alocate unui anumit proces).
    • S-a adăugat un nou parametru de linie de comandă de kernel „trace_trigger”, conceput pentru a activa un declanșator de urmărire utilizat pentru a lega comenzile condiționate apelate atunci când este declanșată o verificare de control (de exemplu, trace_trigger="sched_switch.stacktrace dacă prev_state == 2").
    • Cerințele pentru versiunea pachetului binutils au fost crescute. Construirea nucleului necesită acum cel puțin binutils 2.25.
    • La apelarea exec(), a fost adăugată capacitatea de a plasa un proces într-un spațiu de nume de timp, în care timpul diferă de ora sistemului.
    • Am început să transferăm funcționalități suplimentare din ramura Rust-for-Linux legate de utilizarea limbajului Rust ca a doua limbă pentru dezvoltarea de drivere și module de kernel. Suportul Rust este dezactivat în mod implicit și nu are ca rezultat includerea Rust ca dependență necesară pentru construirea nucleului. Funcționalitatea de bază oferită în ultima versiune este extinsă pentru a suporta codul de nivel scăzut, cum ar fi tipul Vec și macrocomenzile pr_debug!(), pr_cont!() și pr_alert!(), precum și macrocomanda procedurală „#[vtable ]”, care simplifică lucrul cu tabelele de indicatori asupra funcțiilor. Adăugarea de legături Rust de nivel înalt peste subsistemele nucleului, care va permite crearea de drivere cu drepturi depline în Rust, este așteptată în versiunile viitoare.
    • Tipul „char” folosit în nucleu este acum declarat nesemnat în mod implicit pentru toate arhitecturile.
    • Mecanismul de alocare a memoriei slab - SLOB (slab allocator), care a fost proiectat pentru sisteme cu o cantitate mică de memorie, a fost declarat învechit. În loc de SLOB, în condiții normale se recomandă utilizarea SLUB sau SLAB. Pentru sistemele cu o cantitate mică de memorie, se recomandă utilizarea SLUB în modul SLUB_TINY.
  • Subsistem de disc, I/O și sisteme de fișiere
    • Au fost aduse îmbunătățiri la Btrfs menite să remedieze problema „gaurii de scriere” în implementările RAID 5/6 (o încercare de a restabili un RAID dacă are loc o blocare în timpul scrierii și este imposibil să înțelegem ce bloc pe care dispozitiv RAID a fost scris corect, care poate duce la distrugerea blocurilor, corespunzătoare blocurilor subscrise). În plus, SSD-urile permit acum automat operarea de eliminare asincronă în mod implicit atunci când este posibil, permițând o performanță îmbunătățită datorită grupării eficiente a operațiunilor de eliminare în cozi și procesării cozii de către un procesor de fundal. Performanță îmbunătățită a operațiunilor de trimitere și căutare, precum și a FIEMAP ioctl.
    • Capacitățile de gestionare a scrierii amânate (scriere înapoi, salvare în fundal a datelor modificate) pentru dispozitivele bloc au fost extinse. În unele situații, cum ar fi atunci când utilizați dispozitive de blocare a rețelei sau unități USB, scrierile lenețe pot duce la un consum mare de RAM. Pentru a controla comportamentul scrierilor leneșe și pentru a menține dimensiunea cache-ului paginii în anumite limite, în sysfs (/sys/class/bdi/) au fost introduși noi parametri strict_limit, min_bytes, max_bytes, min_ratio_fine și max_ratio_fine.
    • Sistemul de fișiere F2FS implementează o operație de înlocuire atomică ioctl, care vă permite să scrieți date într-un fișier într-o singură operațiune atomică. F2FS adaugă, de asemenea, un cache pentru extinderea blocurilor pentru a ajuta la identificarea datelor utilizate în mod activ sau a datelor care nu au fost accesate de mult timp.
    • În ext4 FS sunt notate doar corecții de eroare.
    • Sistemul de fișiere ntfs3 oferă mai multe opțiuni noi de montare: „nocase” pentru a controla sensibilitatea cu majuscule și minuscule în numele fișierelor și directoarelor; windows_name pentru a interzice crearea de nume de fișiere care conțin caractere care nu sunt valide pentru Windows; hide_dot_files pentru a controla atribuirea etichetei de fișier ascunse pentru fișierele care încep cu un punct.
    • Sistemul de fișiere Squashfs implementează o opțiune de montare „threads=", care vă permite să definiți numărul de fire pentru a paraleliza operațiunile de decompresie. Squashfs a introdus, de asemenea, capacitatea de a mapa ID-urile de utilizator ale sistemelor de fișiere montate, utilizate pentru a potrivi fișierele unui anumit utilizator de pe o partiție străină montată cu alt utilizator de pe sistemul curent.
    • Implementarea listelor de control al accesului POSIX (POSIX ACL) a fost reelaborată. Noua implementare elimină problemele arhitecturale, simplifică întreținerea bazei de cod și introduce tipuri de date mai sigure.
    • Subsistemul fscrypt, care este utilizat pentru criptarea transparentă a fișierelor și directoarelor, a adăugat suport pentru algoritmul de criptare SM4 (standard chinez GB/T 32907-2016).
    • A fost oferită capacitatea de a construi nucleul fără suport NFSv2 (în viitor ei plănuiesc să înceteze complet suportul NFSv2).
    • Organizarea verificării drepturilor de acces la dispozitivele NVMe a fost modificată. Oferă posibilitatea de a citi și de a scrie pe un dispozitiv NVMe dacă procesul de scriere are acces la fișierul dedicat dispozitivului (anterior, procesul trebuia să aibă permisiunea CAP_SYS_ADMIN).
    • S-a eliminat driverul pachetului CD/DVD, care a fost depreciat în 2016.
  • Virtualizare și securitate
    • O nouă metodă de protecție împotriva vulnerabilității Retbleed a fost implementată în procesoarele Intel și AMD, folosind urmărirea adâncimii apelurilor, care nu încetinește activitatea la fel de mult ca protecția prezentă anterior împotriva Retbleed. Pentru a activa noul mod, a fost propus parametrul liniei de comandă a nucleului „retbleed=stuff”.
    • S-a adăugat un mecanism hibrid de protecție a fluxului de instrucțiuni FineIBT, care combină utilizarea instrucțiunilor hardware Intel IBT (Indirect Branch Tracking) și protecție software kCFI (kernel Control Flow Integrity) pentru a bloca încălcarea ordinii normale de execuție (flux de control) ca urmare a utilizării. de exploit-uri care modifică pointerii stocați în memorie pe funcții. FineIBT permite execuția prin salt indirect doar în cazul unui salt la instrucțiunea ENDBR, care este plasată chiar la începutul funcției. În plus, prin analogie cu mecanismul kCFI, hashurile sunt apoi verificate pentru a garanta imuabilitatea pointerilor.
    • S-au adăugat restricții pentru blocarea atacurilor care manipulează generarea stărilor „oops”, după care sarcinile problematice sunt finalizate și starea este restabilită fără a opri sistemul. Cu un număr foarte mare de apeluri la starea „oops”, are loc o depășire a contorului de referință (refcount), care permite exploatarea vulnerabilităților cauzate de dereferințele pointerului NULL. Pentru a se proteja împotriva unor astfel de atacuri, nucleului a fost adăugată o limită pentru numărul maxim de declanșatori „oops”, după depășirea căruia nucleul va iniția o tranziție la starea de „panică” urmată de o repornire, care nu va permite realizarea numărul de iterații necesare pentru a depăși refcount. În mod implicit, limita este setată la 10 mii „oops”, dar dacă se dorește, poate fi modificată prin parametrul oops_limit.
    • S-a adăugat parametrul de configurare LEGACY_TIOCSTI și sysctl legacy_tiocsti pentru a dezactiva capacitatea de a introduce date în terminal folosind ioctl TIOCSTI, deoarece această funcționalitate poate fi utilizată pentru a înlocui caractere arbitrare în buffer-ul de intrare terminal și pentru a simula intrarea utilizatorului.
    • Este propus un nou tip de structură internă, coded_page, în care biții inferiori ai pointerului sunt utilizați pentru a stoca informații suplimentare utilizate pentru a proteja împotriva dereferinței accidentale a pointerului (dacă dereferința este de fapt necesară, acești biți suplimentari trebuie șters mai întâi) .
    • Pe platforma ARM64, în stadiul de pornire, este posibilă activarea sau dezactivarea implementării software a mecanismului Shadow Stack, care este utilizat pentru a proteja împotriva suprascrierii adresei de retur de la o funcție în cazul depășirii buffer-ului pe stivă ( Esența protecției este de a salva adresa de retur într-o stivă separată „umbră” după ce controlul este transferat în funcție și preluarea adresei date înainte de a ieși din funcție). Suportul pentru implementările hardware și software ale Shadow Stack într-un singur ansamblu de nucleu vă permite să utilizați un nucleu pe diferite sisteme ARM, indiferent de suportul acestora pentru instrucțiunile pentru autentificarea pointerului. Includerea unei implementări software se realizează prin înlocuirea instrucțiunilor necesare în cod în timpul încărcării.
    • S-a adăugat suport pentru utilizarea mecanismului de notificare a ieșirii asincrone pe procesoarele Intel, care permite detectarea atacurilor într-un singur pas asupra codului executat în enclavele SGX.
    • Este propus un set de operațiuni care permit hipervizorului să suporte cererile de la sistemele invitate Intel TDX (Trusted Domain Extensions).
    • Setările de compilare a nucleului RANDOM_TRUST_BOOTLOADER și RANDOM_TRUST_CPU au fost eliminate, în favoarea opțiunilor corespunzătoare din linia de comandă random.trust_bootloader și random.trust_cpu.
    • Mecanismul Landlock, care vă permite să limitați interacțiunea unui grup de procese cu mediul extern, a adăugat suport pentru flag-ul LANDLOCK_ACCESS_FS_TRUNCATE, care face posibilă controlul execuției operațiunilor de trunchiere a fișierelor.
  • Subsistemul de rețea
    • Pentru IPv6, a fost adăugat suport pentru PLB (Protective Load Balancing), un mecanism de echilibrare a sarcinii între legăturile de rețea, menit să reducă punctele de supraîncărcare pe comutatoarele centrelor de date. Prin schimbarea etichetei de flux IPv6, PLB schimbă aleatoriu căile de pachete pentru a echilibra sarcina pe porturile switch-ului. Pentru a reduce reordonarea pachetelor, această operație este efectuată după perioade de inactivitate ori de câte ori este posibil. Utilizarea PLB în centrele de date Google a redus dezechilibrul de încărcare pe porturile switch-ului cu o medie de 60%, a redus pierderea de pachete cu 33% și a redus latența cu 20%.
    • S-a adăugat driver pentru dispozitivele MediaTek care acceptă Wi-Fi 7 (802.11be).
    • S-a adăugat suport pentru legături de 800 de gigabiți.
    • S-a adăugat posibilitatea de a redenumi interfețele de rețea din mers, fără a opri munca.
    • O mențiune despre adresa IP la care a ajuns pachetul a fost adăugată la mesajele de jurnal despre inundația SYN.
    • Pentru UDP, a fost implementată capacitatea de a utiliza tabele hash separate pentru diferite spații de nume de rețea.
    • Pentru podurile de rețea, a fost implementat suportul pentru metoda de autentificare MAB (MAC Authentication Bypass).
    • Pentru protocolul CAN (CAN_RAW), a fost implementat suport pentru modul socket SO_MARK pentru atașarea filtrelor de trafic bazate pe fwmark.
    • ipset implementează un nou parametru de mască de bit care vă permite să setați o mască pe baza biților arbitrari din adresa IP (de exemplu, „ipset create set1 hash:ip bitmask 255.128.255.0”).
    • S-a adăugat suport pentru procesarea antetelor interne din pachetele tunelizate la nf_tables.
  • Оборудование
    • Subsistemul „accel” a fost adăugat odată cu implementarea unui cadru pentru acceleratoare de calcul, care pot fi furnizate fie sub formă de ASIC-uri individuale, fie sub formă de blocuri IP în interiorul SoC și GPU. Aceste acceleratoare au ca scop în principal accelerarea soluționării problemelor de învățare automată.
    • Driverul amdgpu include suport pentru componentele GC, PSP, SMU și NBIO IP. Pentru sistemele ARM64, este implementat suportul pentru DCN (Display Core Next). Implementarea ieșirii ecranului protejat a fost mutată de la utilizarea DCN10 la DCN21 și acum poate fi utilizată la conectarea mai multor ecrane.
    • Driverul i915 (Intel) are suport stabilizat pentru plăcile video discrete Intel Arc (DG2/Alchemist).
    • Driverul Nouveau acceptă GPU-uri NVIDIA GA102 (RTX 30) bazate pe arhitectura Ampere. Pentru cardurile nva3 (GT215), a fost adăugată capacitatea de a controla lumina de fundal.
    • S-a adăugat suport pentru adaptoarele fără fir bazate pe Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) și cipuri MediaTek MT7996, interfețele Bluetooth Broadcom BCM4377/4378/4387, precum și controlerele Motorcomm GE ytVIDIA yt8521.
    • S-a adăugat suport ASoC (ALSA System on Chip) pentru cipurile de sunet încorporate HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. S-a adăugat suport pentru interfața audio Focusrite Saffire Pro 40. S-a adăugat codec audio Realtek RT1318.
    • S-a 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.
    • S-a adăugat suport pentru ARM SoC și Apple T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460), SM6375 (Snapdragon 695), 670napdragon plăci , SDM670 (Snapdragon 8976), MSM652 (Snapdragon 8956), MSM650 (Snapdragon 3326), RK351 Odroid-Go/rg310, Zyxel NSA8S, InnoComm i.MXXNUMXMM, Odroid Go Ultra.

În același timp, Latin American Free Software Foundation a format o versiune a nucleului complet gratuit 6.2 - Linux-libre 6.2-gnu, curățată de elemente de firmware și drivere care conțin componente sau secțiuni de cod proprietare, al căror domeniu de aplicare este limitat de producatorul. Noua versiune curăță noile blob-uri din driverul nouveau. Încărcarea blob este dezactivată în driverele mt7622, ​​​​mt7996 wifi și bcm4377 bluetooth. S-au curățat numele blob în fișierele dts pentru arhitectura Aarch64. Cod de curățare blob actualizat în diferite drivere și subsisteme. S-a oprit curățarea driverului s5k4ecgx, deoarece a fost eliminat din nucleu.

Sursa: opennet.ru

Adauga un comentariu