Vydání jádra Linux 5.8

Po dvou měsících vývoje Linus Torvalds představen vydání jádra Linux 5.8. Mezi nejpozoruhodnější změny patří detektor závodních podmínek KCSAN, univerzální mechanismus pro doručování upozornění do uživatelského prostoru, hardwarová podpora pro inline šifrování, vylepšené bezpečnostní mechanismy pro ARM64, podpora ruského procesoru Baikal-T1, možnost samostatně připojit instance procfs , implementace Shadow bezpečnostních mechanismů pro ARM64 Call Stack a BTI.

Kernel 5.8 se stal největším co do počtu změn ze všech jader za celou dobu existence projektu. Kromě toho se změny netýkají žádného subsystému, ale pokrývají různé části jádra a jsou spojeny hlavně s vnitřním přepracováním a čištěním. Největší změny jsou vidět u ovladačů. Nová verze obsahovala 17606 2081 oprav od 20 65 vývojářů, které ovlivnily přibližně 16180 % všech souborů v úložišti kódu jádra. Velikost opravy je 1043240 MB (změny se dotkly 489854 5.7 souborů, bylo přidáno 15033 39 37 řádků kódu, smazáno 5.8 16 řádků). Pro srovnání, větev 11 měla 3 4 oprav a velikost opravy XNUMX MB. Přibližně XNUMX % všech změn zavedených v XNUMX se týká ovladačů zařízení, přibližně XNUMX % změn souvisí s aktualizací kódu specifického pro hardwarové architektury, XNUMX % se týká síťového zásobníku, XNUMX % se týkají souborových systémů a XNUMX % souvisí s vnitřními subsystémy jádra.

hlavní inovace:

  • Virtualizace a bezpečnost
    • Je zajištěno načítání modulů jádra, které mají sekce s kódem, ve kterém jsou současně nastaveny bity umožňující provádění a zápis. Změna byla implementována jako součást většího projektu, jehož cílem bylo zbavit jádro používání paměťových stránek, které umožňují současné spouštění a zápis.
    • Nyní je možné vytvářet samostatné instance procfs, což umožňuje použití více bodů připojení procfs, připojených s různými možnostmi, ale odrážející stejný jmenný prostor identifikátoru procesu (jmenný prostor pid). Dříve všechny přípojné body procfs zrcadlily pouze jednu interní reprezentaci a jakákoli změna parametrů připojení ovlivnila všechny ostatní přípojné body spojené se stejným jmenným prostorem ID procesu. Mezi oblasti, ve kterých může být požadována montáž s různými možnostmi, je implementace odlehčené izolace pro vestavěné systémy se schopností skrýt určité typy procesů a informačních uzlů v procfs.
    • Podpora mechanismu byla implementována pro platformu ARM64
      Zásobník volání stínů, kterou poskytuje kompilátor Clang k ochraně proti přepsání návratové adresy funkce v případě přetečení zásobníku zásobníku. Podstatou ochrany je uložení návratové adresy do samostatného „stínového“ zásobníku po přenesení řízení na funkci a získání této adresy před ukončením funkce.

    • Pro platformu ARM64 byla přidána podpora instrukcí ARMv8.5-BTI (Branch Target Indicator) k ochraně provádění sad instrukcí, na které by se neměly větvit. Blokování přechodů do libovolných částí kódu je implementováno, aby se zabránilo vytváření gadgetů v exploitech, které využívají návratově orientované programovací techniky (ROP - Return-Oriented Programming; útočník se nesnaží umístit svůj kód do paměti, ale operuje s již existujícími kusy). strojových instrukcí, které končí zpětnou řídicí instrukcí, ze které je vytvořen řetězec volání pro získání požadované funkčnosti).
    • Přidána hardwarová podpora pro inline šifrování blokových zařízení (Inline šifrování). Šifrovací zařízení Inlinep jsou obvykle zabudována do jednotky, ale jsou logicky umístěna mezi systémovou pamětí a diskem a transparentně šifrují a dešifrují I/O na základě klíčů specifikovaných jádrem a šifrovacího algoritmu.
    • Byla přidána možnost příkazového řádku jádra "initrdmem", která vám umožní zadat adresu fyzické paměti initrd při umístění počátečního zaváděcího obrazu do RAM.
    • Přidána nová schopnost: CAP_PERFMON pro přístup k podsystému perf a provádění monitorování výkonu. CAP_BPF, který umožňuje určité operace BPF (jako je načítání programů BPF), které dříve vyžadovaly práva CAP_SYS_ADMIN (práva CAP_SYS_ADMIN jsou nyní rozdělena na kombinaci CAP_BPF, CAP_PERFMON a CAP_NET_ADMIN).
    • Přidáno nové zařízení virtio-mem, které vám umožňuje za provozu připojit a zapojit paměť do hostujících systémů.
    • Implementováno vyvolání mapovacích operací v /dev/mem, pokud ovladač zařízení používá překrývající se oblasti paměti.
    • Přidána ochrana proti zranitelnosti CROSSTalk/SRBDS, který umožňuje obnovit výsledky určitých instrukcí provedených na jiném jádru CPU.
  • Paměťové a systémové služby
    • V dokumentu definujícím pravidla pro formátování kódu přijato doporučení pro používání inkluzivní terminologie. Vývojářům se nedoporučuje používat kombinace 'master / slave' a 'blacklist / whitelist', stejně jako slovo 'slave' samostatně. Doporučení se týkají pouze nového použití těchto termínů. Zmínky o specifikovaných slovech již existujících v jádru zůstanou nedotčeny. V novém kódu je použití označených výrazů povoleno, pokud je to vyžadováno pro podporu rozhraní API a ABI vystavených v uživatelském prostoru, stejně jako při aktualizaci kódu na podporu stávajícího hardwaru nebo protokolů, jejichž specifikace vyžadují použití určitých výrazů.
    • Součástí je ladicí nástroj KCSAN (Kernel Concurrency Sanitizer), určený pro dynamickou detekci podmínky závodu uvnitř jádra. Použití KCSAN je podporováno při sestavování GCC a Clang a vyžaduje speciální úpravy v době kompilace pro sledování přístupu k paměti (používají se body přerušení, které se spouštějí při čtení nebo úpravě paměti). Vývoj KCSAN se zaměřoval na prevenci falešných pozitivních výsledků, škálovatelnost a snadné použití.
    • Přidat univerzální mechanismus doručování upozornění z jádra do uživatelského prostoru. Mechanismus je založen na standardním ovladači potrubí a umožňuje efektivně distribuovat oznámení z jádra přes kanály otevřené v uživatelském prostoru. Body příjmu oznámení jsou roury, které se otevírají ve speciálním režimu a umožňují shromažďování zpráv přijatých z jádra v kruhové vyrovnávací paměti. Čtení se provádí obvyklou funkcí read(). Vlastník kanálu určuje, které zdroje v jádře je třeba monitorovat, a může definovat filtr, který bude ignorovat určité typy zpráv a událostí. Z událostí jsou aktuálně podporovány pouze operace s klíči, jako je přidávání/odebírání klíčů a změna jejich atributů. Tyto události jsou plánovány pro použití v GNOME.
    • Pokračující vývoj funkce 'pidfd', která pomáhá zvládat situace opětovného použití PID (pidfd je spojeno se specifickým procesem a nemění se, zatímco PID může být spojeno s jiným procesem poté, co aktuální proces spojený s tímto PID skončí). Nová verze přidává podporu pro použití pidfd k připojení procesu ke jmenným prostorům (umožňuje specifikovat pidfd při provádění systémového volání setns). Použití pidfd vám umožňuje ovládat připojení procesu k několika typům jmenných prostorů jedním voláním, což výrazně snižuje počet nezbytných systémových volání a implementuje připojení v atomickém režimu (pokud připojení k jednomu z jmenných prostorů selže, ostatní se nepřipojí) .
    • Přidáno nové systémové volání faccessat2(), odlišné od
      faccessat() další argument s příznaky, které splňují doporučení POSIX (dříve byly tyto příznaky emulovány v knihovně C a nový faccessat2 umožňuje jejich implementaci v jádře).

    • V Cgroup přidal nastavení memory.swap.high, které lze použít ke zpomalení úloh, které zabírají příliš mnoho odkládacího prostoru.
    • K asynchronnímu I/O rozhraní io_uring přidána podpora pro systémové volání tee().
    • Přidán mechanismus "BPF iterátor, navržený pro výstup obsahu struktur jádra do uživatelského prostoru.
    • Pokud schopnost používat kruhovou vyrovnávací paměť pro výměnu dat mezi programy BPF.
    • Do mechanismu padata, navržený tak, aby organizoval paralelní provádění úloh v jádře, přidal podporu pro vícevláknové úlohy s vyrovnáváním zátěže.
    • V mechanismu pstore, který vám umožňuje uložit ladicí informace o příčině havárie do oblastí paměti, které se mezi restarty neztratí, přidal backend pro ukládání informací pro blokování zařízení.
    • Z větve jádra PREEMPT_RT přestěhoval realizace lokálních zámků.
    • Přidat nové API pro alokaci vyrovnávací paměti (AF_XDP), zaměřené na zjednodušení zápisu síťových ovladačů s podporou XDP (eXpress Data Path).
    • Pro architekturu RISC-V byla implementována podpora pro ladění komponent jádra pomocí KGDB.
    • Před vydáním 4.8 byly zvýšeny požadavky na verzi GCC, kterou lze použít k sestavení jádra. V jedné z příštích verzí se plánuje zvýšení laťky na GCC 4.9.
  • Diskový subsystém, I/O a souborové systémy
    • V Mapovači zařízení přidal nový obslužný program dm-ebs (emulovat velikost bloku), který lze použít k emulaci menší velikosti logického bloku (například k emulaci 512bajtových sektorů na discích o velikosti sektoru 4K).
    • Souborový systém F2FS nyní podporuje kompresi pomocí algoritmu LZO-RLE.
    • V dm-crypt přidal podpora šifrovaných klíčů.
    • Btrfs zlepšilo zpracování operací čtení v režimu přímého I/O. Při montáži zrychlený kontrola smazaných podsekcí a adresářů ponechaných bez rodiče.
    • Do CIFS byl přidán parametr „nodelete“, který umožňuje běžné kontroly oprávnění na serveru, ale zakazuje klientovi mazat soubory nebo adresáře.
    • Ext4 má vylepšené zpracování chyb ENOSPC při použití multithreadingu. xattr přidal podporu pro jmenný prostor gnu.* používaný v GNU Hurd.
    • Pro Ext4 a XFS je povolena podpora operací DAX (přímý přístup do souborového systému, obcházení mezipaměti stránek bez použití úrovně blokového zařízení) ve vztahu k jednotlivým souborům a adresářům.
    • V systémovém volání statx() přidána vlajka STATX_ATTR_DAX, který, když je zadán, načítá informace pomocí enginu DAX.
    • EXFAT přidal podpora pro ověření bootovací oblasti.
    • V FAT zlepšila proaktivní načítání prvků FS. Testování pomalého 2TB USB disku ukázalo zkrácení doby dokončení testu z 383 na 51 sekund.
  • Síťový subsystém
    • V kódu pro řízení provozu síťových mostů přidal podpora protokolů MRP (Media Redundancy Protocol), který umožňuje odolnost proti chybám zacyklením více ethernetových přepínačů.
    • Do systému řízení dopravy (Tc) přidal nová akce „brána“, která umožňuje definovat časové intervaly pro zpracování a zahození určitých paketů.
    • Do jádra a utility ethtool byla přidána podpora pro testování připojeného síťového kabelu a vlastní diagnostika síťových zařízení.
    • Do zásobníku IPv6 byla přidána podpora pro algoritmus MPLS (Multiprotocol Label Switching) pro směrování paketů pomocí víceprotokolového přepínání štítků (MPLS bylo dříve podporováno pro IPv4).
    • Přidána podpora pro přenos IKE (Internet Key Exchange) a IPSec paketů přes TCP (RFC 8229) obejít možné blokování UDP.
    • Přidáno síťové blokové zařízení rnbd, které umožňuje organizovat vzdálený přístup k blokovému zařízení pomocí transportu RDMA (InfiniBand, RoCE, iWARP) a protokolu RTRS.
    • V zásobníku TCP přidal podpora komprese rozsahu v odpovědích selektivního potvrzení (SACK).
    • Pro IPv6 implementováno podpora TCP-LD (RFC 6069, Dlouhé výpadky připojení).
  • Оборудование
    • Ovladač i915 DRM pro grafické karty Intel obsahuje ve výchozím nastavení podporu čipů Intel Tiger Lake (GEN12), pro které implementováno možnost využít systém SAGV (System Agent Geyserville) k dynamickému nastavení frekvence a napětí v závislosti na spotřebě energie nebo požadavcích na výkon.
    • Ovladač amdgpu přidal podporu pro formát pixelů FP16 a schopnost pracovat se šifrovanými vyrovnávací paměti ve video paměti (TMZ, Trusted Memory Zone).
    • Přidána podpora výkonových senzorů pro procesory AMD Zen a Zen2 a také teplotních senzorů pro AMD Ryzen 4000 Renoir. Podpora pro získávání informací o spotřebě energie prostřednictvím rozhraní je poskytována pro AMD Zen a Zen2 RAPL (Průběžný průměrný výkonový limit).
    • Do ovladače Nouveau byla přidána podpora formátu modifikátoru NVIDIA. Pro gv100 byla implementována možnost používat prokládané režimy skenování. Přidána definice vGPU.
    • Do ovladače MSM (Qualcomm) přidána podpora pro GPU Adreno A405, A640 a A650.
    • Přidat interní rámec pro správu zdrojů DRM (Direct Rendering Manager).
    • Přidána podpora pro smartphony Xiaomi Redmi Note 7 a Samsung Galaxy S2 a také notebooky Elm/Hana Chromebook.
    • Přidány ovladače pro LCD panely: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.
    • Přidána podpora pro ARM desky a platformy Renesas "RZ/G1H", Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuMMC50, Check Point-e
      , Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI.

    • Přidána podpora MIPS procesoru Loongson-2K (zkráceně Loongson64). Pro CPU Loongson 3 byla přidána podpora virtualizace pomocí KVM hypervisoru.
    • Přidal
      podpora pro ruský procesor Baikal-T1 a systém na čipu na něm založený BE-T1000. Procesor Baikal-T1 obsahuje dvě superskalární jádra P5600 MIPS 32 r5 pracující na frekvenci 1.2 GHz. Čip obsahuje L2 cache (1 MB), řadič paměti DDR3-1600 ECC, 1 10Gb Ethernet port, 2 1Gb Ethernet porty, PCIe Gen.3 x4 řadič, 2 SATA 3.0 porty, USB 2.0, GPIO, UART, SPI, I2C. Procesor poskytuje hardwarovou podporu pro virtualizaci, SIMD instrukce a integrovaný hardwarový kryptografický akcelerátor, který podporuje GOST 28147-89. Čip je vyvíjen pomocí procesorového jádra MIPS32 P5600 Warrior s licencí od Imagination Technologies.

Ve stejné době Latinská Amerika Free Software Foundation vytvořený
вариант zcela bezplatné jádro 5.8 - Linux-libre 5.8-gnu, zbavený prvků firmwaru a ovladače obsahujících nesvobodné komponenty nebo části kódu, jejichž rozsah je omezen výrobcem. Nová verze deaktivuje načítání objektů blob v ovladačích pro 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 Aimplifier, 38060 Home Audio ProcessLifier, 2 Home Audio a I86C EEPROM Slave. Aktualizovaný kód čištění objektů blob v ovladačích a subsystémech Adreno GPU, HabanaLabs Goya, dotykové obrazovce x6656, vtXNUMX a btbcm.

Zdroj: opennet.ru

Přidat komentář