Uvoľnenie jadra Linux 5.8

Po dvoch mesiacoch vývoja Linus Torvalds predstavil uvoľnenie jadra Linux 5.8. Medzi najsignifikantnejšie zmeny patrí detektor stavových pretečení KCSAN, univerzálny mechanizmus doručovania oznámení do užívateľského priestoru, podpora zariadení pre inline šifrovanie, rozšírené mechanizmy ochrany pre ARM64, podpora ruského procesora Baikal-T1, možnosť oddeleného pripojenia inštancií procfs, implementácia mechanizmov ochrany Shadow Call Stack a BTI pre ARM64.

Jadro 5.8 sa stalo najväčším z pohľadu počtu zmien vo všetkých jadrách v histórii projektu. Zmeny nie sú sústredené na jednu podsystem, ale pokrývajú rôzne časti jadra a vo väčšine súvisia s vnútornými prerábkami a úpravami. Najviac zmien sa vyskytuje v ovládačoch. Do novej verzie bolo prijatých 17606 opráv od 2081 vývojárov, ktoré zasiahli približne 20% všetkých súborov v repozitári s kódom jadra. Veľkosť patchu je 65 MB (zmeny sa dotkli 16180 súborov, pridalo sa 1043240 riadkov kódu a odstránilo sa 489854 riadkov). Pre porovnanie, vo vetve 5.7 bolo vykonaných 15033 opráv a veľkosť patchu činila 39 MB. Približne 37% všetkých zmien predstavených v 5.8 sa týka ovládačov zariadení, asi 16% zmien súvisí s aktualizáciou kódu špecifického pre hardvérové architektúry, 11% súvisí s sieťovým stackom, 3% s súborovými systémami a 4% s vnútornými podsystemami jadra.

Hlavné novinky:

  • Virtualizácia a bezpečnosť
    • Bola zabezpečená blokácia načítania modulov jadra, ktoré majú sekcie s kódom, v ktorých sú súčasne nastavené bity povoľujúce vykonávanie a zápis. Zmena bola realizovaná v rámci širšieho projektu na odstránenie použitia strán pamäte, ktoré umožňujú súčasné vykonávanie a zápis.
    • Objavila sa možnosť vytvárania samostatných inštancií procfs, ktoré umožňujú používať niekoľko bodov pripojenia procfs namontovaných s rôznymi možnosťami, ale odrážajúcich jeden priestor mien identifikátorov procesov (pid namespace). Predtým všetky body pripojenia procfs iba zrkadlili jedno interné zobrazenie a akákoľvek zmena parametrov montovania sa odrazila na všetkých ostatných bodoch pripojenia súvisiacich s tým istým priestorom mien identifikátorov procesov. Z oblastí, v ktorých môže byť požiadavka na montovanie s rôznymi možnosťami, sa spomína realizácia ľahkého izolovania pre zabudované systémy s možnosťou skrytia určitých typov procesov a informačných uzlov v procfs.
    • Pre platformu ARM64 bola implementovaná podpora mechanizmu
      Shadow-Call Stack, poskytovaného kompilátorom Clang na ochranu pred prepísaním adresy návratu z funkcie v prípade pretečenia vyrovnávacej pamäte na zásobníku. Podstata ochrany spočíva v uchovaní adresy návratu do samostatného „tieňového“ zásobníka po odovzdaní riadenia funkcii a jej vyzdvihnutí pred opustením funkcie.
    • Pre platformu ARM64 bola pridaná podpora inštrukcií ARMv8.5-BTI (Branch Target Indicator) na ochranu vykonávania súborov inštrukcií, na ktoré by nemali byť vykonávané prechody pri vetvení. Blokovanie prechodov na ľubovoľné časti kódu bolo implementované na boj proti vytvoreniu gadgetov v exploitoch, ktoré využívajú techniky orientovaného programovania návratu (ROP – Return-Oriented Programming, útočník sa nesnaží umiestniť svoj kód do pamäte, ale operuje už existujúcimi časťami strojových inštrukcií, ktoré končia inštrukciou návratu riadenia, z ktorých sa vytvára reťazec volaní na získanie požadovanej funkčnosti).
    • Pridaná podpora hardvéru pre inline šifrovanie blokových zariadení (Inline Encryption). Zariadenia inline šifrovania sú zvyčajne zabudované do úložiska, ale logicky sú umiestnené medzi systémovou pamäťou a diskom, zabezpečujúce transparentné šifrovanie a dešifrovanie vstupu/výstupu na základe kľúčov a algoritmu šifrovania definovaných jadrom.
    • Bol pridaný parameter príkazového riadku jadra „initrdmem“, ktorý umožňuje špecifikovať fyzickú adresu umiestnenia initrd v pamäti pri umiestňovaní počiatočného zavádzacieho obrazu do RAM.
    • Pridané nové schopnosti: CAP_PERFMON pre prístup k podsysémam perf a vykonávanie monitoringu výkonu. CAP_BPF, umožňujúci vykonanie niektorých operácií s BPF (napríklad načítanie BPF programov), ktoré predtým vyžadovali práva CAP_SYS_ADMIN (teraz sú oprávnenia CAP_SYS_ADMIN rozdelené na kombináciu CAP_BPF, CAP_PERFMON a CAP_NET_ADMIN).
    • Pridané nové zariadenie virtio-mem, ktoré umožňuje implementovať horúce pripojenie a odpojenie pamäte k hosťujúcim systémom.
    • Realizovaný odvolávací mechanizmus pre mapovanie v /dev/mem, ak zariadenie ovláda prekryté oblasti pamäte.
    • Pridaná ochrana pred zraniteľnosťou CROSSTalk/SRBDS, ktorá umožňuje obnoviť výsledky vykonania niektorých inštrukcií, vykonávaných na inom CPU jadre.
  • Pamäť a systémové služby
    • Do dokumentu, ktorý určuje pravidlá formátovania kódu, boli prijaté odporúčania na používanie inkluzívnej terminológie. Vývojárom sa neodporúča používať spojenia ‘master/slave’ a ‘blacklist/whitelist’, ani samostatné slovo ‘slave’. Odporúčania sa týkajú iba nového použitia týchto termínov. Už existujúce zmienky o uvedených slovách v jadre zostanú nedotknuté. V novom kóde je používanie označených termínov povolené, ak to vyžaduje zachovanie API a ABI, ako aj pri aktualizácii kódu na podporu existujúceho hardvéru alebo protokolov, ktorých špecifikácie predpisujú používanie určitých termínov.
    • Do súboru bol zahrnutý ladení nástroj KCSAN (Kernel Concurrency Sanitizer), určený na dynamické odhaľovanie stavov pretekania v rámci jadra. Používanie KCSAN je podporované pri zostavovaní v GCC a Clang a vyžaduje prídavné špeciálne modifikácie v štádiu kompilácie na sledovanie prístupu k pamäti (aplikujú sa breakpointy, ktoré sa spustia pri čítaní alebo zmene pamäte). Hlavná pozornosť pri vývoji KCSAN bola venovaná prevencii falošných poplachov, škálovateľnosti a jednoduchej používanosti.
    • Pridané univerzálny mechanizmus doručovanie oznámení z jadra do používateľského priestoru. Mechanizmus je založený na štandardnom ovládači pipe a umožňuje efektívne rozdeliť oznámenia z jadra po kanáloch otvorených v používateľskom priestore. Body prijatia oznámení predstavujú pipe otvorené v špeciálnom režime, ktoré umožňujú akumulovať prichádzajúce správy z jadra v kruhovom buffri. Čítanie sa vykonáva bežnou funkciou read(). Majiteľ kanála určuje, ktoré zdroje v jadre je potrebné sledovať a môže nastaviť filter na ignorovanie správ a udalostí určitých typov. Z udalostí sú zatiaľ podporované len operácie s kľúčmi, ako je pridávanie/odstraňovanie kľúčov a zmena ich atribútov. Tieto udalosti plánujú použiť v GNOME.
    • Pokračuje rozvoj funkčnosti 'pidfd', ktorá pomáha spracovávať situácie s opätovným použitím PID (pidfd je viazané na konkrétny proces a nemení sa, zatiaľ čo PID môže byť priradené k inému procesu po ukončení aktuálneho procesu asociovaného s týmto PID). V novej verzii bola pridaná podpora použitia pidfd na pripojenie procesu k priestorom mien (povolené je určenie pidfd pri vykonávaní systémového volania setns). Použitie pidfd umožňuje jedným volaním spravovať pripojenie procesu k viacerým typom priestorov mien, čo významne skracuje počet potrebných systémových volaní a realizuje pripojenie v atomickom režime (ak pri pripojení k jednému z priestorov mien dôjde k chybe, nebudú pripojené ani ostatné).
    • Bol pridaný nový systémový hovor faccessat2(), ktorý sa líši od
      faccessat() ďalším argumentom s vlajkami zodpovedajúcimi odporúčaniam POSIX (predtým tieto vlajky emulovali v knižnici C, a nový faccessat2 umožňuje ich realizáciu v jadre).
    • V Cgroup bola pridaná nastavenie memory.swap.high, ktoré môže byť použité na spomalenie úloh, ktoré zaberajú príliš veľa miesta v oddiele pre výmenu.
    • V rozhraní asynchrónneho vstupu/výstupu io_uring bola pridaná podpora systémového volania tee().
    • Bol pridaný mechanizmus „BPF iterator„ určený na výstup do používateľského priestoru obsahu štruktúr jadra.
    • Poskytla možnosť použitia kruhového buffra na výmenu údajov medzi BPF programami.
    • V mechanizme padata, určený na organizáciu paralelného vykonávania úloh v jadre, bola pridaná podpora pre viacvláknové úlohy s vyvažovaním záťaže.
    • Do mechanizmu pstore, ktorý umožňuje uchovávať debuggovacie informácie o príčine pádu v oblasti pamäte, ktoré sa nestratia medzi reštartmi, bol pridaný backend na uchovávanie informácií na blokových zariadeniach.
    • Z vetvy jadra PREEMPT_RT presunutá implementácia lokálnych zámkov.
    • Pridané nové API pre alokáciu bufferov (AF_XDP), zamerané na zjednodušenie písania sieťových ovládačov s podporou XDP (eXpress Data Path).
    • Pre architektúru RISC-V bola implementovaná podpora pre ladenie súčastí jadra pomocou KGDB.
    • Pred vydaním 4.8 boli zvýšené požiadavky na verziu GCC, ktorá môže byť použitá na zostavenie jadra. V niektorom z nasledujúcich vydaní sa plánuje zvýšiť požiadavku na GCC na 4.9.
  • Diskový subsystém, I/O a súborové systémy
    • V Device Mapper bol pridaný nový spracovateľ dm-ebs (emulate block size), ktorý môže byť použitý na emuláciu menšej veľkosti logického bloku (napríklad na emuláciu 512-bajtových sektorov na diskoch s veľkosťou sektora 4K).
    • Vo súborovom systéme F2FS sa objavila podpora kompresie pomocou algoritmu LZO-RLE.
    • V dm-crypt bola pridaná podpora šifrovaných kľúčov.
    • V Btrfs sa zlepšilo spracovanie operácií čítania v režime priamého I/O. Pri pripojení urýchlená kontrola vzdialených poddélnikov a adresárov, ktoré zostali bez rodiča.
    • V CIFS bol pridaný parameter "nodelete", ktorý umožňuje štandardné kontroly práv na serveri, ale zakazuje klientovi mazať súbory alebo adresáre.
    • V Ext4 sa zlepšilo spracovanie chyby ENOSPC pri používaní viacvláknovosti. V xattr bola pridaná podpora pre názvový priestor gnu.*, ktorý sa používa v GNU Hurd.
    • Pre Ext4 a XFS bola povolená podpora pre operácie DAX (priamy prístup k FS obchádzaním stránkového cache bez použitia úrovne blokových zariadení) v spojení so samostatnými súbormi a adresármi.
    • V systémovom volaní statx() bol pridaný flag STATX_ATTR_DAX, pri jehož zadaní sa informácie získavajú pomocou mechanizmu DAX.
    • V EXFAT bola pridaná podpora overovania zavádzacej oblasti.
    • V FAT vylepšiť пред загрузка prvkov FS. Testovanie pomalého 2TB USB zariadenia ukázalo skrátenie času testu z 383 na 51 sekúnd.
  • Sieťový subsystém
    • V kóde riadiacom činnosť sieťových mostov bola pridaná podpora protokolu MRP (Media Redundancy Protocol), ktorý zabezpečuje vysokú dostupnosť prepojením viacerých Ethernet prepínačov.
    • V systéme správy prevádzky (Tc) bolo pridané nová funkcia „gate“, ktorá umožňuje určiť časové intervaly na spracovanie a odmietanie určitých paketov.
    • Do jadra a utilitky ethtool bola pridaná podpora funkcií testovania pripojeného sieťového kábla a sebadetiagnostiky sieťových zariadení.
    • Do IPv6 zásobníka bola pridaná podpora algoritmu MPLS (Multiprotocol Label Switching) pre smerovanie paketov s využitím viacerých protokolov na základe štítkov (pre IPv4 bola MPLS podporovaná už skôr).
    • Bola pridaná podpora prenosu paketov IKE (Internet Key Exchange) a IPSec cez TCP (RFC 8229) pre obídenie možných blokád UDP.
    • Pridané sieťové blokové zariadenie rnbd, ktoré umožňuje organizovať vzdialený prístup k blokovému zariadeniu pomocou RDMA transportu (InfiniBand, RoCE, iWARP) a protokolu RTRS.
    • V TCP zásobníku bola pridaná podpora kompresie rozsahov v odpovediach na výberové potvrdenie (selective acknowledgment, SACK).
    • Pre IPv6 bola implementovaná podpora TCP-LD (RFC 6069, Dlhé prerušenia konektivity).
  • Zariadenie
    • V DRM ovládači i915 pre grafické karty Intel bola predvolene zapnutá podpora čipov Intel Tiger Lake (GEN12), pre ktoré tiež bola implementovaná existuje možnosť využívania systému SAGV (System Agent Geyserville) na dynamické prispôsobenie frekvencie a napätia v závislosti od požiadaviek na spotrebu energie alebo výkon.
    • V ovládači amdgpu bola pridaná podpora pixelového formátu FP16 a implementovaná možnosť práce so šifrovanými vyrovnávacími pamäťami vo video pamäti (TMZ, Trusted Memory Zone).
    • Bola pridaná podpora snímačov spotreby energie procesorov AMD Zen a Zen2, ako aj snímačov teploty AMD Ryzen 4000 Renoir. Pre AMD Zen a Zen2 je zabezpečená podpora extrakcie informácií o spotrebe energie cez rozhranie RAPL (Running Average Power Limit).
    • V ovládači Nouveau bola pridaná podpora formátu modifikátorov NVIDIA. Pre gv100 bola implementovaná možnosť používania polovičných režimov snímkovania. Pridané rozpoznanie vGPU.
    • V ovládači MSM (Qualcomm) bola pridaná podpora GPU Adreno A405, A640 a A650.
    • Pridané interný rámec na správu zdrojov DRM (Direct Rendering Manager).
    • Bola pridaná podpora smartfónov Xiaomi Redmi Note 7 a Samsung Galaxy S2, ako aj notebookov Elm/Hana Chromebook.
    • Boli pridané ovládače pre LCD panely: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • Pridaná podpora pre ARM platformy a platformy Renesas „RZ/G1H“, Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-LIME-eMMC, Check Point L-50,
      , Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI.
    • Pridaná podpora MIPS procesora Loongson-2K (skrátený Loongson64). Pre CPU Loongson 3 bola pridaná podpora virtualizácie pomocou hypervízora KVM.
    • Pridaná
      podpora ruského procesora Baikal-T1 a systému na čipe založeného na ňom BE-T1000. Procesor Baikal-T1 obsahuje dva superskalárne jadrá P5600 MIPS 32 r5, ktoré pracujú na frekvencii 1,2 GHz. Čip obsahuje L2 cache (1 MB), DDR3-1600 ECC pamäťový kontrolér, 1 port 10Gb Ethernet, 2 porty 1Gb Ethernet, PCIe Gen.3 x4 kontrolér, 2 porty SATA 3.0, USB 2.0, GPIO, UART, SPI, I2C. Procesor poskytuje hardvérovú podporu virtualizácie, SIMD inštrukcie a integrovaný hardvérový akcelerátor kryptografických operácií, ktorý podporuje GOST 28147-89. Čip bol vyvinutý pomocou licencovanej procesorovej jednotky MIPS32 P5600 Warrior od spoločnosti Imagination Technologies.

Zároveň latinskoamerická Nadácia slobodného softvéru vytvorila
variantu úplne slobodného jadra 5.8 — Linux-libre 5.8-gnu, vyčisteného od prvkov firmvéru a ovládačov, ktoré obsahujú neslobodné komponenty alebo časti kódu, ktorých použitie je obmedzené výrobcom. V novej verzii je zakázané načítanie blobov v ovládačoch pre Atom ISP Video, MediaTek 7663 USB/7915 PCIe, Realtek 8723DE WiFi, Renesas PCI xHCI, HabanaLabs Gaudi, Enhanced Asynchronous Sample Rate Converter, Maxim Integrated MAX98390 Speaker Amplifier, Microsemi ZL38060 Connected Home Audio Processor a I2C EEPROM Slave. Aktualizovaný kód čistenia blobov v ovládačoch a subsystémoch Adreno GPU, HabanaLabs Goya, x86 dotyková obrazovka, vt6656 a btbcm.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster