Lansarea nucleului Linux 6.19. Noul nucleu va purta numărul 7.0

După două luni de dezvoltare, Linus Torvalds a lansat versiunea nucleului Linux 6.19. Printre cele mai notabile modificări se numără: subsystema Live Update Orchestrator, suport pentru PCIe Link Encryption, apel de sistem listns, modul Zero-Copy Receive în io_uring, suport pentru extensia ARM MPAM, klp-build pentru generarea de live-patch-uri, suport pentru arhitectura LoongArch32, QoS pentru s2idle, optimizarea subsystemei de audit, Intel LASS pentru protecția împotriva Spectre, suport pentru hashe-uri SHA-3 și BLAKE2b, mecanismul Confidential VMBus, optimizări TX în subsystema de rețea, protocolul CAN XL, API pentru accelerarea hardware a ieșirii HDR.

În anunțul noii versiuni, Linus a menționat că următoarei versiuni a nucleului i se va atribui numărul 7.0, deoarece în ramura 6.x s-au acumulat suficiente versiuni pentru a schimba primul număr din numărul de versiune (la vremea respectivă, versiunea 6.0 a fost formată imediat după 5.19). Schimbarea numerotării se face din motive estetice și este un pas formal, care îndepărtează disconfortul cauzat de acumularea unui număr mare de versiuni în serie. Linus a glumit că numerele mari îl confuză, deoarece nu are destule degete la mâini și la picioare. Totuși, există un motiv formal pentru schimbarea semnificativă a numărului versiunii, deoarece, începând cu următoarea versiune, suportul pentru Rust a fost decis să fie mutat din opțiuni experimentale în funcții de bază ale nucleului.

Noua versiune include 15657 de corecturi de la 2237 de dezvoltatori, dimensiunea patch-ului este de 52 MB (modificările au afectat 13682 fișiere, au fost adăugate 794649 de linii de cod și au fost șterse 335498 de linii). În versiunea anterioară au fost 15035 de corecturi de la 2217 de dezvoltatori, dimensiunea patch-ului fiind de 45 MB. Aproape 40% din toate modificările prezentate în 6.19 sunt legate de driverele de dispozitive, aproximativ 13% din modificări sunt legate de actualizarea codului specific arhitecturii hardware, 12% sunt asociate cu stiva de rețea, 5% cu sistemele de fișiere și 3% cu subsistemele interne ale nucleului.

Principalele noutăți din nucleul 6.19 (1, 2, 3):

  • Subsistemul de disc, I/O și sistemele de fișiere
    • În Btrfs, procesele de verificare a FS (scrub) și înlocuirea dispozitivelor nu mai blochează trecerea sistemului în modul de repaus (înainte de a adormi, starea verificării scrub este salvată; după ieșirea din somn, verificarea scrub continuă, iar operațiunea de înlocuire a dispozitivelor este reluată). În implementarea RAID56 a fost adăugată suportul pentru blocuri care depășesc dimensiunea unei pagini de memorie. A fost realizată pregătirea pentru a susține fscrypt. Performanța lucrului cu blocajele a fost îmbunătățită la efectuarea operațiunilor legate de rezervarea spațiului. A fost adăugată suportul pentru operația ioctl „shutdown” care permite trecerea FS în starea în care se face o încercare de a finaliza operațiile deja pornite, dar sunt blocate toate noile operații.
    • În sistemul de fișiere Ext4 a fost implementat suportul pentru blocuri care depășesc dimensiunea unei pagini de memorie (>4KB pe sistemele x86). Utilizarea blockurilor mari permite îmbunătățirea performanței operațiunilor de scriere bufferizată cu o medie de 50%, dar reduce performanța intrării/ieșirii directe datorită creșterii timpului de calcul al sumelor de control. În noua versiune au fost adăugate, de asemenea, optimizări care au crescut lățimea de bandă în timpul defragmentării online.
    • În subsistemul FUSE a fost îmbunătățită susținerea citirii bufferizate prin utilizarea unor folii mari de pagini de memorie (large folios). Prin iomap, a fost implementată posibilitatea de a urmări folii parțial actuale pentru a încărca doar datele lipsă în buffer.
    • În VFS a fost adăugat suportul pentru delegarea revocabilă a controlului directorului (recallable directory delegation), care permite implementarea în NFS a transferului controlului directorului de la server client, astfel încât clientul NFS să urmărească starea directorului pe baza cache-ului local fără a apela la serverul NFS. Dacă un alt client NFS va face modificări legate de acest director, delegarea controlului va fi revocată de la primul client.
    • Pentru NFS a fost adăugată suportul pentru citirea în modul de input/output direct (direct I/O). Au fost implementate setările /sys/kernel/debug/nfsd/io_cache_read și /sys/kernel/debug/nfsd/io_cache_write pentru a gestiona activarea caching-ului și a operațiunilor de input/output direct; manipularea acestor setări permite reducerea supraîncărcării pe partea clientului NFS în timpul executării unor operațiuni mari de input/output.
    • În NTFS a fost implementat suportul pentru operația ioctl shutdown, opțiunile de montare "acl" și "prealloc" fiind activate implicit, și a fost adăugată suportul pentru temporizare până la 1 ianuarie 1970.
    • Pentru dispozitivele bloc și FS, a fost activat implicit caching-ul separat pentru fiecare CPU al obiectelor "bio" (Block I/O) care definesc operațiile active de input/output.
  • Memorie și servicii de sistem
    • În kernel a fost inclus subsistemul Live Update Orchestrator (LUO), care permite repornirea și actualizarea completă a kernelului fără a opri funcționarea și fără a pierde starea sistemului, a dispozitivelor și a proceselor. Subsistemul LUO se bazează pe mecanismul KHO (Kexec HandOver) adăugat anterior în kernel și, în plus față de posibilitatea de a rula un nou kernel dintr-unul vechi fără pierderi de stare a sistemului, rezolvă sarcini precum salvarea stării dispozitivelor și a memoriei, precum și asigurarea continuității operațiunilor legate de DMA și tratarea întreruperilor. Starea este păstrată până la comutarea pe un nou kernel și este restaurată după activarea noului kernel fără a întrerupe operațiunile continue cu dispozitivele efectuate de sistem și aplicații în spațiul utilizatorului.
    • A fost adăugat apelul de sistem listns() pentru a afișa lista spațiilor de nume existente în sistem fără a fi nevoie să parcurgi /proc//ns/ pentru toate procesele.
    • În sistemul de input/output asincron io_uring a fost adăugat suportul pentru plasarea elementelor de dimensiuni diferite în coada de trimitere (SQE, Submission Queue Entry), similar cu modul în care în versiunea anterioară a fost permis amestecul dimensiunii conținutului cozii de rezultate (CQE, Completion Queue Event). Până acum, toate elementele din coadă trebuiau să aibă aceeași dimensiune, ceea ce ducea la un consum excesiv de memorie din cauza necesității de a folosi dimensiunea maximă pentru toate elementele din coadă.

      În io_uring a fost adăugat suport pentru mecanismul zcrx (Zero-Copy Receive) pentru a primi date fără copiere între nucleu și spațiul utilizatorului. A fost adăugat suport pentru cererile de alocare a memoriei pentru cozi SQ (Submission Queue) și CQ (Completion Queue), care permit obținerea informațiilor despre dimensiunea buffer-ului circular necesar pentru alocarea de memorie de către utilizator folosind flag-urile IORING_SETUP_NO_MMAP și IORING_MEM_REGION_TYPE_USER.

    • Pentru o trasare rapidă a stivei cu ajutorul utilitarilor, cum ar fi perf, a fost adăugat suport pentru formatul SFrame cu informații despre desfășurarea stivei de apeluri (unwind). SFrame este deja suportat în GCC și binutils, nu reduce performanța și, spre deosebire de formatul DWARF, conține doar un set minim de informații necesar pentru trasarea stivei.
    • În utilitarul perf a fost adăugat suport pentru descrieri unificate ale metricilor și evenimentelor în format JSON, precum și desfășurarea întârziată (deferred unwinding) a stivei de apeluri în spațiul utilizatorului.
    • Pentru procesoarele AMD a fost implementat un mecanism de substituție a datelor în cache, care permite dispozitivelor de intrare/ieșire să plaseze direct datele în L3-cache-ul CPU fără a le plasa anterior în RAM.
    • A fost adăugat suport pentru MPAM (Memory System Resource Partitioning and Monitoring), o extensie a arhitecturii setului de instrucțiuni ARMv8-A pentru a marca fiecare acces la memorie cu un identificator de secțiune (PARTID, Partition ID) și un identificator de grup de monitorizare (PMG, Monitoring Group ID). În legătură cu PARTID, se poate restricționa consumul de resurse, cum ar fi lățimea de bandă a memoriei sau dimensiunea cache-ului, pentru a preveni ca un anumit grup de sarcini să monopolizeze toate resursele. În contextul monitorizării, combinația PMG și PARTID poate fi utilizată pentru a urmări consumul de resurse de memorie în anumite tipuri de sarcini.
    • În cazul unei închideri neașteptate a procesului după primirea unui semnal, un alt proces, care are pidfd-ul procesului încheiat, poate acum determina numărul semnalului care a provocat închiderea procesului.
    • A fost revizuită implementarea secvențelor reluabile (restartable sequences), permițând aplicațiilor să organizeze o execuție pseudo-atomică neîntreruptă a unui grup de instrucțiuni (în cazul întreruperii de către alt fir, se reîmprospătează încercarea de a executa secvența). Noua implementare se distinge printr-o mai bună eficiență. ridicate.
    • Pentru programele BPF au fost implementate instrucțiunile BPF_JMP, BPF_X și BPF_JA pentru efectuarea salturilor indirecte către o anumită poziție din tabelul de tranziții. Conceptul de pointeri dinamici (dynptr) a fost adăugat, permițând citirea datelor din fișiere structurate. A fost adăugată capacitatea de a atașa la pachetele de rețea mai mulți octeți cu metadate.
    • Modulele în limbajul Python, utilizate pentru procesarea documentației pentru kernel, au fost mutate într-un director separat tools/lib/python.
    • A fost adăugată funcția mempool_alloc_bulk() pentru a aloca în siguranță elemente dintr-un pool de memorie pentru mai multe obiecte simultan.
    • Continuarea transferului modificărilor din ramura Rust-for-Linux, legate de utilizarea limbajului Rust ca a doua limbă pentru dezvoltarea driverelor și modulelor kernel (suportul Rust nu este activat în mod implicit și nu duce la includerea Rust în numărul dependențelor de build obligatorii pentru kernel). În noua versiune, a fost integrată în kernel biblioteca 'syn' cu parser pentru cod Rust, simplificând scrierea macrocomenzilor complexe. Funcționalitatea bibliotecilor kernel, pin-init și rbtree a fost extinsă. A fost adăugată biblioteca 'num' cu tipul Integer pentru manipularea numerelor întregi. Macrocomanda 'module!' a fost actualizată pentru a adăuga suport pentru parametrii întregi. A fost implementată posibilitatea specificării parametrilor la încărcarea modulelor kernel scrise în Rust. S-au realizat abstractizări pentru subsistemele I2C și PWM (Pulse Width Modulation).
    • A fost adăugată macrocomanda 'at_least' (de exemplu, 'param[at_least 7]'), care informează despre dimensiunea minimă admisă a tabloului transmis funcției. Dacă se va transmite un tablou cu un număr mai mic de elemente, compilatorul va furniza un avertisment.
    • A fost inclus un script klp-build pentru generarea modulelor kernel care aduc modificări unui kernel în funcțiune (livepatch), pe baza unui fișier cu patch-uri. În utilitarul objtool au fost aduse modificări necesare pentru a crea live-patch-uri.
    • În User-mode Linux (rularea kernel-ului ca proces de utilizator), a fost adăugată o suport limitat pentru multiprocesare, dar firele de execuție dintr-un singur proces nu pot fi încă executate simultan. A început portarea User-mode Linux pe biblioteca nolibc.
    • A fost adăugat suportul pentru arhitectura LoongArch32 (LA32R, LA32S) pe lângă LoongArch64.
    • A fost adăugată posibilitatea de a stabili limite QoS pentru intensitatea de activare a procesorului în modul de economisire a energiei s2idle (Suspend-To-Idle), care suspendă execuția proceselor în spațiul utilizatorului, dar lasă active unele gestionări în nucleu.
    • A fost adăugată suportul pentru gestionarea tabelelor de pagini de memorie pentru controlerele IOMMU (Input-Output Memory Management Unit), care efectuează traducerea adreselor virtuale vizibile pentru dispozitivele hardware în adrese fizice, cu posibilitatea de a filtra operațiunile DMA pe baza adreselor virtuale, precum și de a restricționa și izola operațiunile de intrare-ieșire.
    • În evenimentele de urmărire a apelurilor de sistem a fost realizată posibilitatea de a citi buffere din spațiul utilizatorului și de a include conținutul lor (de exemplu, numele fișierelor) în rezultatul urmăririi.
    • Pagini de memorie de monitorizare (guard page), accesarea cărora determină o excepție și terminarea procesului (SIGSEGV), sunt acum marcate cu o etichetă specială în fișierul /proc/PID/smaps.
    • A fost adăugată posibilitatea de a gestiona paginile mari de memorie (transparent huge page) în memoria privată a dispozitivelor zonate.
    • În dispozitivul zram, folosit pentru stocarea comprimată a partiției de swap în memorie, a fost implementat suportul pentru excluderea mai multor structuri "bio" (Block I/O) în mod de scriere în lot (writeback batching).
    • A fost inclusă fontul "Terminus 10×18", îmbunătățind lizibilitatea informațiilor de pe consolă pe ecranele laptopurilor cu rezoluție medie (1440×900).
    • Funcționarea subsistemului de audit a fost semnificativ optimizată - s-a observat o reducere a cheltuielilor cu 50%.
  • Virtualizare și securitate
    • A fost adăugată suportul pentru funcția procesorului Intel de separare a spațiului de adrese lineare (LASS, linear address-space separation), care permite separarea hardware a intervalelor de adrese ale spațiului utilizatorului și ale nucleului pentru îmbunătățirea securității. Spațiul de adrese este împărțit pe baza celei mai semnificative biți ai adresei — jumătate din spațiul de adrese cu bitul cel mai semnificativ setat este utilizată pentru nucleu, iar cea inferioară — pentru spațiul utilizatorului. Într-o etapă timpurie de execuție a instrucțiunilor (înainte de execuția speculativă), se efectuează o verificare a validității accesului din spațiul utilizatorului la adresele cu bitul cel mai semnificativ setat și invers. O astfel de separare permite blocarea scurgerilor de memorie din nucleu către spațiul utilizatorului prin canale laterale, chiar și în timpul execuției speculative a instrucțiunilor, ceea ce dă posibilitatea de a aplica LASS pentru protecția împotriva atacurilor de tip Meltdown și Spectre, fără a genera costuri suplimentare semnificative.
    • A fost adăugată posibilitatea activării extensiilor de întărire a securității pentru magistrala PCI Express — PCIe Link Encryption și PCIe Device Authentication, care permit autentificarea și criptarea canalului de comunicare între dispozitivul PCIe și mașina virtuală, protejată prin mecanismele Intel TDX (Trusted Domain Extensions) și AMD SEV-SNP (Secure Nested Paging). Tehnologiile implementate nu permit interceptarea, analizarea și inserarea de date în traficul DMA în cazul în care se are acces la sistemul gazdă sau la alte dispozitive.
    • Biblioteca criptografică încorporată a fost extinsă cu suport pentru algoritmii SHA-3 (SHA3-224, SHA3-256, SHA3-384, SHA3-512) SHAKE128, SHAKE256 și BLAKE2b.
    • Pentru modulele LSM (Linux Security Modules) și, în special, pentru SELinux, a fost implementată posibilitatea de a urmări crearea descriptorilor memfd pentru aplicarea politicilor de securitate la obiectele asociate.
    • În modulul LSM IPE (Integrity Policy Enforcement), care definește politica generală de asigurare a integrității pentru întregul sistem, a fost adăugat suportul pentru flag-ul AT_EXECVE_CHECK în funcția execveat(), care include verificarea integrității scriptului înainte de a fi executat de interpretul de comenzi.
    • Au fost adăugate primitivele scoped_user_read_access(), scoped_user_write_access și scoped_user_rw_access() pentru accesul limitat la datele din spațiul utilizatorului cu protecția împotriva atacurilor speculative.
    • A fost adătat suport pentru mecanismul Confidential VMBus, utilizat în hipervizorul HyperV pentru interacțiunea protejată de intervenție între sistemul de operare gazdă, care rulează în mod confidențial (cu criptare a memoriei și izolare a registrelor bazate pe tehnologiile AMD SNP și Intel TDX), și paravisorul responsabil pentru accesarea dispozitivelor care prelucrează date confidențiale.
    • A fost adătată posibilitatea de a transmite informații despre un proces închis brusc (pentru generarea coredump) prin mecanismul pidfd. Identificatorul PIDFD este legat de un proces specific și rămâne neschimbat, în timp ce PID-ul poate fi legat de un alt proces după finalizarea procesului actual asociat cu acest PID. Utilizarea pidfd permite blocarea atacurilor prin înlocuirea unui proces suid închis brusc cu un alt proces, realizând o stare de competiție în momentul de după începerea procesării de către nucleu a închiderii de urgență, dar înainte de verificarea de către handlerul în spațiul utilizatorului a parametrilor procesului.
  • Subsystema de rețea
    • S-au efectuat optimizări în subsistemul de rețea pentru a crește eficiența transferului de date (TX). Eliminarea blocării spin în funcția __dev_queue_xmit() și utilizarea unei structuri llist fără blocări a permis creșterea performanței de patru ori în condiții de mare încărcare și dublarea intensității de trimitere a pachetelor în condiții de încărcare scăzută a CPU-ului.
    • A fost oferită posibilitatea de a dezactiva limitele sistemice de utilizare a memoriei pentru socket-urile de rețea individuale (în acest caz, se vor utiliza limitele comune pentru memorie stabilite pentru containerele individuale). Pentru a gestiona dezactivarea limitelor, a fost propus sysctl net.core.bypass_prot_mem și flag-ul SK_BPF_BYPASS_PROT_MEM în funcția bpf_setsockopt.
    • A fost adătat suport pentru extensia RFC 5837, care adaugă în mesajele ICMP „Time Exceeded”, returnate atunci când timpul de viață (TTL) al pachetului expira, date despre interfețele de rețea de intrare pentru a obține informații mai detaliate în timpul urmării traseului cu utilitarul traceroute.
    • A fost adătat suport pentru polling activ continuu (busy polling) într-un thread separat al nucleului cu scopul de a extrage descriptorii din queue-urile RX/TX pentru aplicații care necesită întârzieri minime.
    • A fost adăugat suport pentru protocolul CAN XL (Controller Area Network eXtended Length), în care dimensiunea câmpului de date a fost mărită la 2048 de octeți pentru a asigura integrarea cu rețelele TCP/IP, s-a implementat posibilitatea tunelării cadrelor Ethernet și s-a adăugat suport pentru modularea în width-pulse, permițând transmiterea de date la viteze de 20 Mbps și mai mari.
    • A fost adăugat suport pentru structura sockaddr_unsized, o variantă a structurii sockaddr care utilizează un array cu elemente flexibile în locul unui array de dimensiune fixă (sa_data[] în loc de sa_data[14], care, în esență, era folosit pentru referințe la alte structuri de dimensiuni mai mari).
    • A fost adăugată posibilitatea utilizării funcționalităților getsockname și getpeername prin subsistemul io_uring.
    • Au fost adăugate parametrii sysctl net.ipv4.tcp_rcvbuf_low_rtt și net.ipv4.tcp_comp_sack_rtt_percent pentru optimizarea TCP.
    • A fost adăugat suport pentru link-uri cu lățimi de bandă de 1600 Gbps (1.6T).
  • Echipament
    • În subsistemul DRM (Direct Rendering Manager) a fost adăugată o API pentru utilizarea capacităților hardware de conversie a culorilor, permițând evitarea realizării unor astfel de conversii prin shadere sau execuția codului pe CPU. Pentru redarea conținutului pe un monitor HDR, conversiile complexe de culoare pot fi acum realizate de controlerul de afișare în etapa dinainte și după amestecarea straturilor (blending), în locul compunerii programatice a conținutului în bufferul final de afișare. Pe lângă reducerea costurilor indirecte și a consumului de energie în organizarea redării în HDR, funcționalitatea propusă poate fi utilizată pentru o redare corectă a culorilor în editorii de video sau imagini.
    • A fost adăugat driverul „ethosu” pentru NPU Arm Ethos U65 și U85, destinat accelerării hardware a execuției modelelor AI.
    • În driverul i915 pentru GPU Lunar Lake și mai recent, a fost adăugat suport pentru îmbunătățirea hardware a clarității imaginii (Sharpening).
    • Continuăm lucrările la driverul drm (Direct Rendering Manager) Xe pentru GPU-uri bazate pe arhitectura Intel Xe, folosită în plăcile video Intel din familia Arc și grafica integrată, începând cu procesoarele Tiger Lake. A fost adăugat suport inițial pentru arhitectura Xe3P, utilizată în GPU-ul Crescent Island și în familiile de procesoare cu grafică integrată Nova Lake.
    • Driverul AMDGPU oferă suport complet pentru plăcile grafice AMD din familia GCN 1.0 „Southern Island” și 1.1 „Sea Islands”, pentru care anterior a fost folosit driverul Radeon. Driverul AMDGPU a fost adus la paritate cu capacitățile driverului Radeon și este activat pentru GPU-urile menționate în mod implicit. Plăcile GCN 1.x au fost lansate între 2012 și 2019 și includ modele precum Radeon HD 77xx/78xx/79xx/87xx/88xx/89xx, Radeon R9 280, FirePro W4000-W9000, Radeon Sky 700/900, Radeon R9 265/270/370, Radeon R9 290/390, HD 7790/8870 și alte plăci grafice din familiile Radeon Rx 200/Rx 300. În plus față de creșterea performanței cu o medie de 24%, trecerea la AMDGPU a realizat suport pentru API-ul grafic Vulkan 1.3 pentru aceste GPU-uri. De asemenea, în AMDGPU a fost adăugat suport pentru conectori analogici și Video Coding Engine 1.0, iar stiva DC (Display Core) este activată implicit pentru GPU-urile bazate pe microarhitectura Bonaire (Radeon HD 7700).
    • Driverul Nouveau oferă suport pentru acceleratorul hardware NVJPG, prezent în SoC Tegra210.
    • Driverul Panthor a adăugat suport pentru GPU Mali-G1 și suport inițial pentru cipul MediaTek MT8196.
    • A fost adăugat suport pentru subsistemul audio al cipurilor Intel Nova Lake S, laptopuri HP cu HDA CS35L41, precum și pentru interfețele audio CIX IPBLOQ HD și Onkyo SE-300PCIE.
    • Continuarea integrării componentelor driverului Nova pentru GPU-urile NVIDIA, echipate cu firmware GSP, utilizate începând cu seria NVIDIA GeForce RTX 2000 bazată pe microarhitectura Turing. Driverul este scris în limbajul Rust. În noua versiune a început lucrul la RPC și a fost finalizată implementarea încărcării coprocesorului GSP (GPU System Processor).
    • A fost adăugat suport pentru plăci ARM, SoC și dispozitive: Bananapi r4 pro, LinkEase EasePi R1, Qualcomm MSM8937 (Snapdragon 430), Renesas R-Car X5H, FriendlyElec NanoPi R76S, TI AM62L, Black Sesame Technologies C1200, Aspeed AST2600, Genio 1200 EVK, grinn geniosbc-510/700, Tanix TX9 Pro, Radxa Dragon Q6A, Tinker Board 3/3S, Aquila AM69, phyBOARD-Segin-i.MX91, i.MX 95 Verdin Evaluation Kit, Toradex SMARC iMX95, VIDIA Jetson Nano 2GB, Renesas rz/g3s, Indiedroid Nova, 24 variante de plăci Enclustra Mercury.
    • Adăugat suport pentru smartphone-uri și tablete bazate pe SoC Mediatek MT6582 (Alcatel yarisxl), Nvidia Tegra124 (Xiaomi Mi Pad) și Qualcomm MSM8939 (ASUS ZenFone 2). Adăugat suport pentru laptopuri cu SoC Qualcomm sdm850, cum ar fi Huawei MateBook E 2019.
    • A fost adăugat suport pentru SoC și plăci bazate pe arhitectura RISC-V: OrangePi R2S, OrangePi RV, Anlogic dr1v90, Tenstorrent Blackhole.

Între timp, Fondul Latino-American pentru Software Liber a format o variantă complet liberă a nucleului 6.19 — Linux-libre 6.19-gnu, curățată de elemente de firmware și drivere care conțin componente sau fragmente de cod ne-libre, ale căror domenii de aplicare sunt limitate de către fabricant. În versiunea 6.19 din subsistemul audio SDCA a fost eliminat codul pentru încărcarea firmware-urilor binare. Codul de curățare a blob-urilor în driverele Intel XE, Nova-Core, Qualcomm Iris, Venus și Q6V5, TI PRUeth, Intel iwlwifi, Marvell mwifiex, FourSemi fs210x, Realtek rt1320 și codec-urile audio TI tas2783 a fost actualizat. A fost realizată curățarea numelui blob-urilor în fișierele dts (devicetree) pentru cipurile ARM. Curățarea driverului STM C8SECTPFE DVB a fost oprită, fiind 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