Lansarea kernel-ului Linux 5.2

După două luni de dezvoltare, Linus Torvalds a prezentat lansarea nucleului Linux 5.2. Printre cele mai notabile modificări: modul de funcționare Ext4 fără a ține cont de registru, apeluri sistemice separate pentru montarea FS, drivere pentru GPU Mali 4xx/6xx/7xx, posibilitatea de a trata modificarea valorilor sysctl în programele BPF, modulul device-mapper dm-dust, protecție împotriva atacurilor MDS, suport pentru Sound Open Firmware pentru DSP, optimizarea performanței BFQ, aducerea subsistemului PSI (Pressure Stall Information) la capacitatea de a fi folosit î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 afectat 30889 de fișiere, au fost adăugate 625094 de linii de cod, 531864 de linii fiind eliminate). Aproape 45% din toate modificările prezentate în 5.2
sunt legate de driverele de dispozitive, aproximativ 21% din 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
subsystemelor kernel-ului. 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 registru în numele fișierelor, care se activează doar în legătură cu anumite directoare goale printr-un 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 registru, inclusiv registrul va fi ignorat în timpul operațiunilor de căutare și deschidere a fișierelor (de exemplu, fișierele Test.txt, test.txt și test.TXT în aceste directoare vor fi considerate identice). În mod implicit, FS rămâne sensibil la registru, cu excepția directoarelor cu atributul „chattr +F”;
    • Funcțiile pentru manipularea caracterelor UTF-8 în numele fișierelor au fost unificate, acestea fiind 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 stării de funcționalitate. A fost implementată o opțiune experimentală pentru a verifica în timp real (online scrub) contorii superblocului.
    • A fost adăugat un nou modul device-mapper „dm-dust„, care permite simularea apariției bad-block-urilor pe suport sau a erorilor la citirea de pe disc. Modulul facilitează debugging-ul și testarea aplicațiilor și diferitelor sisteme de stocare în condiții de posibile defecțiuni;
    • Realizat optimizare semnificativă a performanței planificatorului de intrare/ieșire BFQ. În condiții de sarcină mare pe intrare/ieșire, s-au efectuat optimizări. permit reducerea cu până la 80% a timpului pentru operațiuni precum lansarea aplicațiilor;
    • A fost adăugată o serie de apeluri sistemice pentru montarea sistemelor de fișiere: fsopen(), open_tree(), fspick(), fsmount(), fsconfig() și move_mount(). Aceste apeluri sistemice permit procesarea separată a diferitelor etape ale montării (procesarea superblocului, obținerea informațiilor despre FS, montarea, atașarea la un punct de montare), care anterior erau realizate printr-un apel sistemic general mount(). Apelurile separate permit executarea unor scenarii de montare mai complexe și tratarea separată a unor operațiuni precum reconfigurarea superblocului, activarea opțiunilor, modificarea punctului de montare și mutarea în alt spațiu de nume. În plus, procesarea separată permite identificarea exactă a cauzelor generării codurilor de eroare și specificarea mai multor surse pentru FS-uri multi-stratificate, precum overlayfs;
    • În interfata pentru intrare/ieșire asincronă io_uring a fost adăugată o nouă operațiune IORING_OP_SYNC_FILE_RANGE, care execută acțiuni echivalente apelului sistemic sync_file_range(), de asemenea, a fost implementată capacitatea de a înregistra eventfd cu io_uring și de a primi notificări despre finalizarea operațiunilor;
    • Pentru sistemul de fișiere CIFS a fost adăugat ioctl FIEMAP, care asigură maparea eficientă a extentelor ș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 cache-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 linkuri hard. A fost îmbunătățit codul de verificare a integrității datelor, care acum ia în considerare posibilele daune asupra informațiilor în RAM înainte de a scrie datele pe disc;
    • În CEPH a fost adăugat suport pentru exportarea instantaneelor prin NFS;
    • A fost îmbunătățită implementarea montării NFSv4 în modul 'soft' (în cazul unei erori de acces la server în modul 'soft', apelul returnează imediat codul de eroare, iar în modul 'hard' controlul nu este restituit până la restabilirea disponibilității FS sau expirarea timpului). În noua versiune, a fost asigurată o tratare mai precisă a timpurilor de așteptare, a fost accelerată recuperarea după o defecțiune și a fost adăugată o nouă opțiune de montare 'softerr', care permite schimbarea codului de eroare (ETIMEDOUT) returnat atunci când se ating limitele de timp;
    • În API nfsdcld, destinat monitorizării stării clienților NFS, a fost implementată posibilitatea de a urmări corect starea clientului de către serverul NFS în cazul repornirii. Astfel, demonul nfsdcld poate acum să îndeplinească rolul de procesor nfsdcltrack;
    • Pentru AFS a fost adăugată emularea blocărilor de interval de byte în fișiere (Blocare pe Interval de Byte);
  • Virtualizare și securitate
    • S-au efectuat lucrări de eliminare a locurilor din nucleu care permit executarea codului din zonele de memorie scriabile afișate, ceea ce ajută la blocarea breșelor potențiale care pot fi exploatate în cadrul unui atac;
    • A fost adăugat un nou parametru al liniei de comandă a nucleului „mitigations=”, care oferă un mod simplificat de a gestiona activarea anumitor tehnici de protecție împotriva vulnerabilităților legate de executarea speculativă a instrucțiunilor în CPU. Transmiterea „mitigations=off” dezactivează toate metodele disponibile, iar modul implicit „mitigations=auto” activează protecția fără a influența utilizarea Hyper Threading-ului. Modul „mitigations=auto,nosmt” dezactivează în plus Hyper Threading-ul, dacă metoda de protecție o impune.
    • Adăugat suport pentru semnătura electronică digitală conform GOST R 34.10-2012 (RFC 7091, ISO/IEC 14888-3), dezvoltată de Vitali Ciukunov de la „Bazalt SPO”. În implementarea încorporată TLS a fost adăugat suport pentru AES128-CCM. Modulul crypto_simd a primit suport pentru algoritmi AEAD;
    • În Kconfig a fost adăugată un sector separat „kernel hardening” cu opțiuni pentru întărirea protecției nucleului. În prezent, în noul sector sunt colectate doar setările pentru activarea verificărilor GCC-plugin-urilor;
    • Codul nucleului este aproape eliminat fără expresii întrerupte case în switch (fără return sau break după fiecare bloc case). Mai trebuie corectate 32 din cele 2311 cazuri de utilizare similară 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 la datele din spațiul utilizatorului;
    • A fost adăugat cod pentru blocarea atacurilor clasei MDS (Microarchitectural Data Sampling) în procesoarele Intel. Verificarea expunerii sistemului la vulnerabilitate se poate face prin variabila SysFS „/sys/devices/system/cpu/vulnerabilities/mds”. Disponibil există două moduri de protecție: complet, care necesită microcod actualizat, și ocolitor, care nu garantează în întregime ștergerea bufferelor CPU atunci când controlul este transferat în spațiul utilizatorului sau sistemul gazdă. Pentru gestionarea modurilor 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, mecanisme de depanare și tratamente de excepție a fost adăugată protecția «stack guard-page», care se referă la substituirea pe marginea stivei a paginilor de memorie, accesarea cărora duce la generarea unei excepții (page-fault);
    • A fost adăugată setarea sysctl vm.unprivileged_userfaultfd, care controlează capacitatea de a utiliza apelul de sistem userfaultfd() de către procesele neprivilegiate;
  • Subsystema de rețea
    • Adăugat suport pentru gateway-uri IPv6 pentru rutele IPv4. De exemplu, acum este posibil să specificați 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
      adreselor 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 decentralizate, fiecare nod fiind conectat prin noduri vecine, a fost adăugată suport pentru translarea din multicast în unicast, precum și posibilitatea de gestionare prin sysfs;
    • În ethtool adăugat un nou parametru Fast Link Down, care permite reducerea timpului 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 legarea tunelurilor Foo-Over-UDP la o anumită adresă, interfață de rețea sau socket (anterior, legarea se realiza doar pe o mască comună);
    • În stiva wireless s-a asigurat posibilitatea de implementare a tratamentelor
      OWE (Opportunistic Wireless Encryption) în spațiul utilizatorului;
    • În Netfilter, lanțurile nat au adăugat suport pentru familia de adrese inet (de exemplu, acum se poate utiliza o regulă de translatare pentru a gestiona 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 de sistem clone() a fost adăugat un flag CLONE_PIDFD, prin care procesului părinte i se returnează descriptorul de fișier "pidfd", asociat cu procesul copil creat. Acest descriptor de fișier, de exemplu, poate fi utilizat pentru a trimite semnale fără a te teme de o stare de competiție (imediat după trimiterea semnalului, PID-ul țintă poate fi eliberat datorită finalizării procesului și ocupat de un alt proces);
    • Pentru a doua versiune a cgroup-urilor a fost adăugată funcționalitatea controlerului freezer, prin care se poate opri activitatea în cgroup și elibera temporar unele resurse (CPU, intrare/ieșire și potențial chiar memorie) pentru a efectua 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 toate grupurile copil. Deoarece înghețarea necesită timp, a fost propus suplimentar fișierul cgroup.events prin care se poate afla despre finalizarea operației;
    • Asigurat exportul atributelor de memorie asociate fiecărui nod în sysfs, ceea ce permite din spațiul utilizatorului să determine natura gestionării băncilor de memorie în sistemele cu memorie heterogenă;
    • Sub-sistemul PSI (Pressure Stall Information) a fost îmbunătățit, permițând analiza informațiilor despre timpul de așteptare pentru obținerea diverselor resurse (CPU, memorie, intrare/ieșire) pentru anumite sarcini sau seturi de procese în cgroup. Prin intermediul PSI, manipulatoarele din spațiul utilizator pot evalua mai precis nivelul de încărcare a sistemului și natura încetinirii, comparativ cu Load Average. În noua versiune, a fost asigurată suportul pentru configurarea pragurilor de sensibilitate și posibilitatea de a folosi apelul poll() pentru a primi notificări cu privire la declanșarea valorilor pragurilor stabilite pe o anumită perioadă de timp. Această capacitate permite organizarea monitorizării lipsei de memorie în Android într-o etapă incipientă, identificând sursa problemelor și încheind aplicațiile neimportante, fără a ajunge la apariția problemelor vizibile pentru utilizatori. În cadrul testării de stres, instrumentele de monitorizare a consumului de memorie bazate pe PSI au demonstrat de 10 ori mai puține activări false în comparație cu statisticile vmpressure;
    • A fost realizată optimizarea codului pentru verificarea programelor BPF, care pentru programele mari a început să efectueze verificarea de până la 20 de ori mai repede. Optimizarea a permis ridicarea limitei pentru dimensiunea programelor BPF de la 4096 la un milion de instrucțiuni;
    • Pentru programele BPF a fost oferită capacitatea de acces la datele globale, ceea ce permite definirea variabilelor și constantelor globale în programe;
    • Adăugat API, ceea ce permite 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 asigură identificarea erorilor în gestionarea memoriei;
    • Pe sistemele x86-64 a fost eliminată limita privind plasarea dump-urilor de stare în caz de crash al nucleului (crash-dump) în zonele de memorie de peste 896MB;
    • Pentru arhitectura s390 a fost implementat suport pentru randomizarea spațiului de adresare al nucleului (KASLR) și posibilitatea de verificare a semnăturilor digitale în timpul încărcării nucleului prin kexec_file_load();
    • Pentru arhitectura PA-RISC a fost adăugată suport pentru depanatorul nucleului (KGDB), etichetele de salt și kprobes;
  • Echipament
    • A fost inclus un driver Lima pentru GPU Mali 400/450, utilizat în multe cipuri mai vechi bazate pe arhitectura ARM. Pentru GPU Mali mai noi a fost adăugat driverul Panfrost, care suportă cipurile bazate pe microarhitecturile Midgard (Mali-T6xx, Mali-T7xx, Mali-T8xx) și Bifrost (Mali G3x, G5x, G7x);
    • A fost adăugată suport pentru dispozitivele audio care folosesc 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 livrat î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 deja pregătite 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 cipuri
      Elkhartlake (Gen11). Au fost adăugate identificatori PCI pentru cipurile Comet Lake (Gen9). A fost stabilizată suportul pentru cipurile Icelake, pentru care au fost adăugate, de asemenea, identificatori suplimentari PCI.
      Activat
      modul de comutare asincron între două buffer-e în memoria video (async flip) la efectuarea operațiunilor de scriere prin mmio, ceea ce a permis o creștere semnificativă a performanței pentru unele aplicații 3D (de exemplu, performanța în testul 3DMark Ice Storm a crescut cu 300-400%). A fost adăugată suportul 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, o magistrală de mare viteză (PCIe 4.0) pentru conectarea GPU-urilor. În driverul amdkfd au fost adăugate identificatorii lipsă pentru plăcile pe bază de GPU Polaris10;
    • În driverul Nouveau a fost adăugat suport pentru plăci bazate pe chipset-ul NVIDIA Turing 117 (TU117, utilizat în GeForce GTX 1650). În
      kconfig a fost adăugată setare pentru dezactivarea funcțiilor învechite, care nu mai sunt utilizate în versiunile actuale ale libdrm;
    • În API-ul DRM și în driverul amdgpu a fost adăugată suport pentru obiectele de sincronizare „timeline”, permițând evitarea blocajelor clasice.
    • Din ramura staging a fost transferat driverul vboxvideo pentru GPU-ul virtual VirtualBox;
    • A fost adăugat driverul aspeed pentru chip-ul GFX SoC ASPEED;
    • A fost adăugat suportul 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 de firmware și drivere care conțin componente sau părți de cod ne-liberate, cu domeniul de aplicare limitat de către 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 din driverul r8822be a fost oprită din cauza ștergerii 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