Lansarea nucleului Linux 5.2

După două luni de dezvoltare, Linus Torvalds a prezentat lansarea nucleului Linux 5.2. Printre cele mai notabile modificări se numără: modul de operare Ext4 fără a ține cont de majuscule, apeluri sistemice separate pentru montarea sistemelor de fișiere, drivere pentru GPU Mali 4xx/6xx/7xx, capacitatea de a gestiona modificările valorilor sysctl în programele BPF, modulul device-mapper dm-dust, protecție împotriva atacurilor MDS, suport pentru Sound Open Firmware pentru DSP, optimizare a performanței BFQ, dezvoltarea subsistemului PSI (Pressure Stall Information) pentru utilizarea în Android.

În noua versiune au fost acceptate 15100 de corecturi de la 1882 de dezvoltatori,
dimensiunea patch-ului fiind de 62 MB (modificările au vizat 30889 de fișiere, 625094 de linii de cod au fost adăugate, iar 531864 de linii au fost eliminate). Aproximativ 45% din toate modificările prezentate în 5.2
sunt legate de driverele de dispozitive, aproximativ 21% dintre modificări au
legătură cu actualizarea codului specific arhitecturilor hardware, 12%
legat de stiva de rețea, 3% — de sistemele de fișiere și 3% de interne
subsystemele nucleului. 12.4% din toate modificările au fost pregătite de compania Intel, 6.3% — Red Hat, 5.4% — Google, 4.0% — AMD, 3.1% — SUSE, 3% — IBM, 2.7% — Huawei, 2.7% — Linaro, 2.2% — ARM, 1.6% — Oracle.

Principalele noutăți:

  • Subsistemul de disc, I/O și sistemele de fișiere
    • Pentru Ext4 a fost adăugat suport pentru modul de funcționare fără a ține cont de majuscule în numele fișierelor, care se activează doar în legătură cu anumite directoare goale, prin intermediul unui nou atribut „+F” (EXT4_CASEFOLD_FL). Atunci când acest atribut este setat pe un director, toate operațiunile cu fișierele și subdirectoarele din interior vor fi efectuate fără a ține cont de majuscule, inclusiv majusculele vor fi ignorate în operațiunile de căutare și deschidere a fișierelor (de exemplu, fișierele Test.txt, test.txt și test.TXT în astfel de directoare vor fi considerate identice). În mod implicit, sistemul de fișiere continuă să fie sensibil la majuscule, cu excepția directorilor cu atributul „chattr +F”;
    • Au fost unificate funcțiile de procesare a simbolurilor UTF-8 în numele fișierelor, care sunt aplicate în timpul operațiunilor de comparare și normalizare a șirurilor;
    • În XFS a fost adăugată o infrastructură pentru monitorizarea stării sistemului de fișiere și un nou ioctl pentru solicitarea statusului de funcționare. A fost implementată o posibilitate experimentală de verificare la cald (online scrub) a contorilor superblocului.
    • A fost adăugat un nou modul device-mapper „dm-dust», care permite simularea apariției blocurilor defecte pe suport sau a erorilor la citirea de pe disc. Modulul facilitează depanarea și testarea aplicațiilor și diferitelor sisteme de stocare în condiții de posibile defecțiuni;
    • Realizat optimizare semnificativă a performanței programatorului de intrare/ieșire BFQ. În condiții de sarcină mare pe intrare/ieșire, optimizările aduse permit reduces the time for operations such as launching applications by up to 80%;
    • S-a adăugat o serie de apeluri de sistem pentru montarea sistemelor de fișiere: fsopen(), open_tree(), fspick(), fsmount(), fsconfig() și move_mount(). Aceste apeluri de sistem permit tratarea separată a diferitelor etape ale montării (tratarea superblocului, obținerea informațiilor despre FS, montarea, atașarea la punctul de montare), care anterior erau realizate prin apelul de sistem comun mount(). Apelurile separate permit executarea unor scenarii de montare mai complexe și realizarea separată a unor operațiuni precum reconfigurarea superblocului, activarea opțiunilor, modificarea punctului de montare și mutarea în alte spații de nume. În plus, procesarea separată permite identificarea exactă a motivelor codurilor de eroare și stabilirea mai multor surse pentru sistemele de fișiere stratificate, cum ar fi overlayfs;
    • În interfata pentru intrare/ieșire asincronă io_uring a fost adăugată o nouă operațiune IORING_OP_SYNC_FILE_RANGE, care efectuează acțiuni echivalente apelului de sistem sync_file_range(), precum și implementarea posibilității de înregistrare a eventfd cu io_uring și primirea notificărilor privind finalizarea operațiunilor;
    • Pentru sistemul de fișiere CIFS a fost adăugat ioctl FIEMAP, asigurând o mapare eficientă a extindărilor, precum și suport pentru modurile SEEK_DATA și SEEK_HOLE;
    • În subsistemul FUSE sub licența MIT. Instrumentul utilizează metode de învățare automată, împreună cu analiza statică și dinamică a codului JavaScript. Se afirmă că utilizarea învățării automate a permis îmbunătățirea semnificativă a preciziei în identificarea codului pentru identificarea ascunsă și a identificat cu 26% mai multe scripturi problematice API pentru gestionarea caching-ului de date;
    • În Btrfs a fost optimizată implementarea qgroups și a fost crescută viteza de executare a fsync pentru fișiere cu mai multe legături dure. Codul de verificare a integrității datelor a fost îmbunătățit, luând acum în considerare posibila corupție a informațiilor în RAM înainte de a scrie datele pe disc;
    • În CEPH a fost adăugată suport pentru exportul snapshot-urilor prin NFS;
    • Implementarea montării NFSv4 în modul „soft” a fost îmbunătățită (atunci când apare o eroare de acces la server în modul „soft”, apelul returnează imediat un cod de eroare, iar în modul „hard” controlul nu se predă până la reluarea accesibilității FS sau timeout). În noua versiune, s-a asigurat o gestionare mai precisă a timeout-ului, s-a accelerat recuperarea după o defecțiune și a fost adăugată o nouă opțiune de montare „softerr”, care permite modificarea codului de eroare (ETIMEDOUT) returnat în cazul unui timeout;
    • În API-ul nfsdcld, destinat urmăririi stării clienților NFS, s-a asigurat posibilitatea unei urmăriri corecte a stării clientului de către serverul NFS după repornire. Astfel, demonul nfsdcld poate acum îndeplini rolul de procesor nfsdcltrack;
    • Pentru AFS a fost adăugată emularea blocărilor intervalelor de octeți în fișiere (Byte Range Locking);
  • Virtualizare și securitate
    • Au fost făcute lucrări pentru eliminarea locurilor din nucleu care permit executarea codului din zonele de memorie reflectate scriabile, ceea ce permite blocarea breșelor potențiale care pot fi exploatate în timpul atacurilor;
    • A fost adăugat un nou parametru de linie de comandă a nucleului „mitigations=”, care oferă o modalitate simplificată de a controla activarea diverselor tehnici de protecție împotriva vulnerabilităților legate de execuția speculativă a instrucțiunilor în CPU. Transmiterea „mitigations=off” dezactivează toate metodele disponibile, iar modul implicit „mitigations=auto” activează protecția, dar nu afectează utilizarea Hyper Threading. Modul „mitigations=auto,nosmt” dezactivează, de asemenea, Hyper Threading, dacă metoda de protecție o solicită.
    • Adăugat suport pentru semnătura electronică digitală conform GOST R 34.10-2012 (RFC 7091, ISO/IEC 14888-3), dezvoltată de Vitalie Çikuno în „Bazalt SPO”. Implementarea încorporată TLS a fost extinsă pentru a include suport pentru AES128-CCM. Modului crypto_simd i-a fost adăugat suport pentru algoritmi AEAD;
    • În Kconfig a fost adăugată secțiune separată „kernel hardening” cu opțiuni pentru întărirea protecției nucleului. Actualmente, în noua secțiune sunt compilate doar setările pentru activarea pluginurilor de verificare GCC;
    • Codul nucleului este aproape eliminat de la expresiile continue case în switch (fără return sau break după fiecare bloc case). Rămâne de corectat 32 din cele 2311 cazuri de utilizare a switch-ului, după care, la compilarea nucleului, va putea fi aplicat modul „-Wimplicit-fallthrough”;
    • Pentru arhitectura PowerPC a fost implementat suportul pentru mecanismele hardware de restricționare a căilor de acces nedorite ale nucleului către datele din spațiul utilizatorului;
    • A fost adăugat cod pentru blocarea atacurilor clasei MDS (Microarchitectural Data Sampling) în procesoarele Intel. Se poate verifica expunerea sistemului la vulnerabilitate prin variabila SysFS „/sys/devices/system/cpu/vulnerabilities/mds”. Disponibil două moduri de protecție: complet, care necesită un microcod actualizat, și unul alternativ, care nu garantează complet curățarea buferelor CPU la transferul controlului în spațiul utilizatorului sau în sistemul oaspete. Pentru a gestiona modurile de protecție, în nucleu a fost adăugat parametrul „mds=”, care poate lua valorile „full”, „full,nosmt” (+ dezactivarea Hyper-Threads) și „off”;
    • Pe sistemele x86-64, pentru IRQ, mecanismele de depanare și manipulatoarele de excepție a fost adăugată protecția „stack guard-page”, care constă în interpunerea unei pagini de memorie la marginea stivei, accesarea căreia duce la generarea unei excepții (page-fault);
    • A fost adăugată configurația sysctl vm.unprivileged_userfaultfd, care controlează posibilitatea utilizării apelului de sistem userfaultfd() de către procesele neprivilegiate;
  • Subsystema de rețea
    • Adăugat suport pentru gateway-uri IPv6 pentru rute IPv4. De exemplu, acum se pot specifica reguli de rutare de tipul „ip ro add 172.16.1.0/24 via inet6 2001:db8::1 dev eth0”;
    • Pentru ICMPv6, au fost implementate apelurile ioctl icmp_echo_ignore_anycast și icmp_echo_ignore_multicast pentru a ignora ICMP ECHO pentru anycast și
      adrese multicast. Adăugat posibilitatea de a limita intensitatea procesării pachetelor ICMPv6;
    • Pentru protocolul mesh B.A.T.M.A.N. („Better Approach To Mobile Adhoc Networking), care permite crearea de rețele descentralizate, fiecare nod fiind conectat prin noduri vecine, a fost adăugată suportul pentru traducerea din multicast în unicast, precum și posibilitatea de gestionare prin sysfs;
    • În ethtool adăugat a fost adăugat un nou parametru Fast Link Down, care reduce timpul de notificare a evenimentului de deconectare a linkului pentru 1000BaseT (în condiții normale, întârzierea poate ajunge până la 750ms);
    • A apărut posibilitatea asocierea tunelurilor Foo-Over-UDP cu o adresă, interfață de rețea sau socket specific (anterior, asocierea se realiza doar pe o mască comună);
    • În stiva wireless s-a asigurat posibilitatea implementării manipulatorilor
      OWE (Opportunistic Wireless Encryption) în spațiul utilizatorului;
    • În Netfilter, în lanțurile nat a fost adăugat suport pentru familia de adrese inet (de exemplu, acum se poate utiliza o regulă de traducere unică pentru a trata ipv4 și ipv6, fără a separa regulile pentru ipv4 și ipv6);
    • În netlink adăugat mod strict pentru verificarea riguroasă a corectitudinii tuturor mesajelor și atributelor, în care nu este permisă depășirea dimensiunii așteptate a atributelor și este interzisă adăugarea de date suplimentare la sfârșitul mesajelor;
  • Memorie și servicii de sistem
    • În apelul sistemic clone() a fost adăugat un flag CLONE_PIDFD, care, atunci când este specificat, returnează procesului părinte descriptorul de fișier «pidfd», asociat cu procesul copil creat. Acest descriptor de fișier poate fi folosit, de exemplu, pentru a trimite semnale fără teama de a întâlni o stare de competiție (imediat după trimiterea semnalului, PID-ul țintă poate fi eliberat datorită terminării procesului și ocupat de un alt proces);
    • Pentru a doua versiune a cgroups a fost adăugată funcționalitatea controlerului freezer, prin care se poate opri activitatea într-un cgroup și temporar elibera anumite resurse (CPU, intrare/ieșire și potențial chiar memorie) pentru a îndeplini alte sarcini. Controlul se face prin fișierele de control cgroup.freeze și cgroup.events din arborele cgroup. Scrierea 1 în cgroup.freeze îngheață procesele din cgroup-ul curent și din toate subgrupurile. Deoarece înghețarea necesită un anumit timp, a fost propus suplimentar fișierul cgroup.events prin care se poate afla despre finalizarea operației;
    • Asigurat exportul atributelor de memorie atașate fiecărui nod în sysfs, ceea ce permite din spațiul utilizatorului să determine modul de gestionare a băncilor de memorie în sistemele cu memorie omogenă;
    • Subsiguranța PSI (Pressure Stall Information) a fost îmbunătățită, permițând analiza informațiilor despre timpul de așteptare pentru obținerea diferitelor resurse (CPU, memorie, intrare/ieșire) pentru anumite sarcini sau grupuri de procese din cgroup. Prin intermediul PSI, handler-ele din spațiul utilizatorului pot evalua mai exact nivelul de utilizare a sistemului și natura încetinirii, în comparație cu Load Average. În noua versiune, a fost asigurată suportul pentru setarea pragurilor de sensibilitate și posibilitatea de a folosi apelul poll() pentru a obține notificări privind atingerea valorilor prag stabilite într-un anumit interval de timp. Această capacitate permite organizarea în Android a monitorizării penuriei de memorie într-un stadiu incipient, identificând sursa problemelor și încheind aplicațiile neimportante, fără a provoca probleme vizibile utilizatorului. În timpul testării de stres, instrumentele de monitorizare a consumului de memorie bazate pe PSI au demonstrat cu 10 ori mai puține alarme false comparativ cu statisticile vmpressure;
    • A avut loc optimizarea codului pentru verificarea programelor BPF, care pentru programele mari a început să execute verificarea de până la 20 de ori mai rapid. Optimizarea a permis creșterea limitei pentru dimensiunea programelor BPF de la 4096 la un milion de instrucțiuni;
    • Pentru programele BPF a fost oferită posibilitatea accesului la date globale, ceea ce permite definirea variabilelor și constantelor globale în programe;
    • Adăugat API, permițând controlul din programele BPF asupra modificărilor parametrilor sysctl;
    • Pentru arhitectura MIPS32 a fost implementat un compilator JIT pentru mașina virtuală eBPF;
    • Pentru arhitectura PowerPC pe 32 de biți a fost adăugată suport pentru instrumentul de depanare KASan (Kernel address sanitizer), care identifică erorile în gestionarea memoriei;
    • Pe sistemele x86-64 a fost eliminată limita de plasare a dump-urilor de stare în cazul unui eșec de kernel (crash-dump) în zonele de memorie de peste 896 MB;
    • Pentru arhitectura s390 a fost implementat suport pentru randomizarea spațiului de adrese al kernelului (KASLR) și posibilitatea de verificare a semnăturilor digitale la pornirea kernelului prin kexec_file_load();
    • Pentru arhitectura PA-RISC a fost adăugat suport pentru depanatorul kernelului (KGDB), pentru etichete de salt și kprobes;
  • Echipament
    • În compunere a fost inclus un driver Lima pentru GPU Mali 400/450, utilizat în multe cipuri vechi bazate pe arhitectura ARM. Pentru GPU-urile Mali mai noi a fost adăugat driverul Panfrost, care suportă cipuri pe bază de microarhitecturi Midgard (Mali-T6xx, Mali-T7xx, Mali-T8xx) și Bifrost (Mali G3x, G5x, G7x);
    • A fost adăugat suport pentru dispozitive audio care utilizează firmware-uri deschise Sound Open Firmware (SOF). În ciuda existenței driverelor deschise, codul firmware-urilor pentru cipurile audio a rămas în continuare închis și a fost furnizat în formă binară. Proiectul Sound Open Firmware a fost dezvoltat de Intel pentru a crea firmware-uri deschise pentru cipurile DSP legate de procesarea sunetului (ulterior, Google s-a alăturat dezvoltării). În prezent, în cadrul proiectului au fost pregătite deja firmware-uri deschise pentru cipurile audio ale platformelor Intel Baytrail, CherryTrail, Broadwell, ApolloLake, GeminiLake, CannonLake și IceLake;
    • În driverul DRM Intel (i915) a fost adăugat suport pentru cipurile
      Elkhartlake (Gen11). Au fost adăugate identificatoare PCI pentru cipurile Comet Lake (Gen9). A fost stabilizată suportul pentru cipurile Icelake, pentru care au fost adăugate și identificatoare PCI suplimentare.
      Activat
      modul de comutare asincron între două bufețe în memoria video (async flip) în timpul operațiunilor de scriere prin mmio, ceea ce a permis o creștere semnificativă a performanței anumitor aplicații 3D (de exemplu, performanța în testul 3DMark Ice Storm a crescut cu 300-400%). A fost adăugat suport pentru tehnologia HDCP2.2 (High-bandwidth Digital Content Protection) pentru criptarea semnalului video transmis prin HDMI;
    • În driverul amdgpu pentru GPU Vega20 a fost adăugată suport pentru RAS (Reliability, Availability, Serviceability) și suport experimental pentru subsistemul SMU 11, care a înlocuit tehnologia Powerplay. Pentru GPU Vega12 a fost adăugată suport pentru modul BACO (Bus Active, Chip Off). A fost adăugat suport inițial pentru XGMI, un bus de mare viteză (PCIe 4.0) pentru conectarea GPU-ului. În driverul amdkfd au fost adăugate identificatoare lipsă pentru plăcile bazate pe GPU Polaris10;
    • În driverul Nouveau a fost adăugat suport pentru plăci bazate pe chipsetul NVIDIA Turing 117 (TU117, folosit în GeForce GTX 1650). În
      kconfig a fost adăugată setare pentru dezactivarea funcțiilor învechite, care nu mai sunt utilizate în versiunile actuale libdrm;
    • În API DRM și driverul amdgpu a fost adăugat suport pentru obiecte de sincronizare „timeline”, care permit evitarea blocajelor clasice.
    • Din ramura staging a fost mutat driverul vboxvideo în compunerea principală pentru GPU-ul virtual VirtualBox;
    • A fost adăugat driverul aspeed pentru chipsetul GFX SoC ASPEED;
    • A fost adăugat suport pentru ARM SoC și plăci Intel Agilex (SoCFPGA), NXP i.MX8MM, Allwinner (RerVision H3-DVK (H3), Oceanic 5205 5inMFD, Beelink GS2 (H6), Orange Pi 3 (H6)), Rockchip (Orange Pi RK3399, Nanopi NEO4, Veyron-Mighty Chromebook), Amlogic: SEI Robotics SEI510,
      ST Micro (stm32mp157a, stm32mp157c), NXP (
      Eckelmann ci4x10 (i.MX6DL),

      i.MX8MM EVK (i.MX8MM),

      ZII i.MX7 RPU2 (i.MX7),

      ZII SPB4 (VF610),

      Zii Ultra (i.MX8M),

      TQ TQMa7S (i.MX7Solo),

      TQ TQMa7D (i.MX7Dual),

      Kobo Aura (i.MX50),

      Menlosystems M53 (i.MX53)), NVIDIA Jetson Nano (Tegra T210).

În același timp, Fondul Latino-American pentru Software Liber a formulat
o variantă kernel complet liber 5.2 — Linux-libre 5.2-gnu, curățat de elemente firmware și drivere care conțin componente sau porțiuni de cod ne-liber, ale căror domeniu de aplicare este limitat de producător. În noua versiune a fost inclusă încărcarea fișierelor
Sound Open Firmware. A fost dezactivată încărcarea blob-urilor în driverele
mt7615, rtw88, rtw8822b, rtw8822c, btmtksdio, iqs5xx, ishtp și ucsi_ccg. A fost actualizat codul de curățare a blob-urilor în drivere și subsistemele ixp4xx, imx-sdma, amdgpu, nouveau și goya, precum și în documentația pentru microcod. Curățarea blob-urilor în driverul r8822be a fost întreruptă din cauza eliminării acestuia.

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