Uvolnění jádra Linux 5.18

Po dvou měsících vývoje Linus Torvalds představil uvolnění jádra Linux 5.18. Mezi nejvýznamnější změny patří: komplexní úklid zastaralých funkcionalit, prohlášení systému souborů Reiserfs za zastaralý, implementace událostí sledování uživatelských procesů, přidání podpory pro mechanismus blokování exploitů Intel IBT, zahrnutí režimu detekce přetečení bufferu při použití funkce memcpy(), přidání mechanismu sledování volání funkcí fprobe, zlepšení výkonu plánovače úloh na CPU AMD Zen, včetně ovladače pro správu funkcionality CPU Intel (SDS), integrace části patchů pro restrukturalizaci hlavičkových souborů, schválení použití standardu C11.

Do nové verze bylo přidáno 16206 oprav od 2127 vývojářů (v minulém vydání bylo 14203 oprav od 1995 vývojářů), velikost patche je 108 MB (změny se dotkly 14235 souborů, bylo přidáno 1340982 řádků kódu a odstraněno 593836 řádků). Přibližně 44 % ze všech změn v 5.18 se týká ovladačů zařízení, asi 16 % změn souvisí s aktualizací kódu specifického pro hardware, 11 % se týká síťového stacku, 3 % se týká souborových systémů a 3 % vnitřních subsystémů jádra.

Hlavní novinky v jádru 5.18:

  • Diskový subsystém, vstup/výstup a souborové systémy
    • Ve souborovém systému Btrfs byla přidána podpora přenosu komprimovaných dat během operací send a receive. Dříve během používání send/receive odesílající strana dekomprimovala data uložená v komprimované podobě, zatímco přijímající je znovu komprimovala před zápisem. V jádru 5.18 mají aplikace běžící ve uživatelském prostoru, které používají volání send/receive, možnost přenášet komprimovaná data bez repackování. Tato funkcionalita byla realizována díky novým ioctl operacím BTRFS_IOC_ENCODED_READ a BTRFS_IOC_ENCODED_WRITE, které umožňují přímo číst a zapisovat informace do extentů.

      Kromě toho byla v Btrfs zvýšena výkonnost fsync. Byla přidána možnost deduplikace a provádění reflink (klonování metadata souboru se vytvořením odkazu na již existující data bez jejich skutečného kopírování) pro celé úložiště, nikoli pouze pro body připojení.

    • V režimu přímého vstupu/výstupu (Direct I/O) je zajištěn přístup k šifrovaným souborům při použití inline šifrování fscrypt, kde operace šifrování a dešifrování provádí řadič úložného zařízení, nikoli jádro. Při běžném šifrování jádrem není přístup k šifrovaným souborům pomocí Direct I/O nadále možný, protože přístup k souborům je prováděn mimo mechanismus vyrovnávací paměti jádra.
    • Na serveru NFS je standardně povolena podpora protokolu NFSv3, která nyní nevyžaduje samostatné povolení a je dostupná při všeobecném povolení NFS. NFSv3 je považována za hlavní a vždy podporovanou verzi NFS, a podpora NFSv2 může být v budoucnu ukončena. Byla významně zvýšena efektivita čtení obsahu adresářů.
    • Souborový systém ReiserFS byl zařazen mezi zastaralé a čeká na odstranění v roce 2025. Zařazení ReiserFS mezi zastaralé sníží časovou náročnost na údržbu obecných změn ve file systémech souvisejících s podporou nového API pro připojení, iomap a svazků.
    • Pro FS F2FS byla implementována možnost mapování identifikátorů uživatelů připojených souborových systémů, která se používá pro přiřazení souborů určitého uživatele na připojené cizí oddíly k jinému uživateli v aktuálním systému.
    • Byl přepracován kód pro počítání statistik ve zpracovatelích Device-mapper, což významně zvýšilo přesnost účetnictví v takových zpracovatelích, jako je dm-crypt.
    • Pro zařízení NVMe byla implementována podpora 64bitových kontrolních součtů pro ověřování integrity.
    • Pro souborový systém exfat byla navržena nová montážní volba 'keep_last_dots', která zakazuje odstraňování teček na konci názvu souboru (v systému Windows jsou tečky na konci názvu ve výchozím nastavení odstraňovány).
    • V EXT4 byla zvýšena výkonnost režimu fast_commit a zvětšena škálovatelnost. Montážní volba 'mb_optimize_scan', která umožňuje zvýšení výkonnosti v podmínkách vysoké fragmentace FS, byla přizpůsobena pro práci se soubory s extentami.
    • Podpora pro zapisovací proudy (write stream) v subsystému, který zajišťuje funkčnost blokových zařízení, byla ukončena. Tato funkce byla navržena pro SSD, avšak nenalezla široké uplatnění a v současnosti neexistují zařízení, která by tento režim podporovala, a je velmi nepravděpodobné, že by se taková zařízení v budoucnu objevila.
  • Paměť a systémové služby
    • Začala integrace sady patchů, která umožňuje výrazně zkrátit čas potřebný k přestavbě jádra díky restrukturalizaci hierarchie hlavičkových souborů a snížení počtu vzájemných závislostí. Patchy optimalizující strukturu hlavičkových souborů plánovače úloh (kernel/sched) byly zařazeny do jádra 5.18. Ve srovnání s předchozím vydáním došlo ke snížení využití procesorového času při sestavení kódu kernel/sched o 61%, a skutečný čas se snížil o 3,9% (z 2,95 na 2,84 sekundy).
    • V kódu jádra je povoleno používání standardu C11, publikovaného v roce 2011. Dříve přidávaný kód do jádra musel vyhovovat specifikaci ANSI C (C89), která byla vytvořena již v roce 1989. V sestavovacích skriptech jádra 5.18 byla možnost ‘—std=gnu89’ nahrazena za ‘—std=gnu11 -Wno-shift-negative-value’. Zvažovalo se využití standardu C17, avšak v tomto případě by bylo nutné zvýšit minimálně podporovanou verzi GCC, podpora C11 však spadá do aktuálních požadavků na verzi GCC (5.1).
    • Byla zvýšena výkonnost plánování úloh na procesorech AMD s mikroarchitekturou Zen, kde pro každý uzel s místními paměťovými kanály je k dispozici několik úrovní posledního cache (LLC, Last Level Cache). V nové verzi byl odstraněn nerovnováha LLC mezi uzly NUMA, což vedlo k významnému zvýšení výkonu při některých typech zátěže.
    • Byly rozšířeny prostředky pro sledování aplikací v uživatelském prostoru. V nové verzi jádra byla přidána možnost vytváření událostí sledování uživatelskými procesy (User events) a zápisu dat do sledovacího bufferu, která lze zobrazit prostřednictvím typických utilit sledování jádra, jako jsou ftrace a perf. Události sledování z uživatelského prostoru jsou izolovány od událostí sledování jádra. Stav událostí lze zobrazit prostřednictvím souboru /sys/kernel/debug/tracing/user_events_status, zatímco registrace události a zápis dat probíhá prostřednictvím souboru /sys/kernel/debug/tracing/user_events_data.
    • Byl přidán mechanismus sledování (probe) volání funkcí — fprobe. API fprobe je založeno na ftrace, ale je omezeno pouze na možnost připojení callback-zpracovatelů k vstupním bodům funkce a k ukončení funkce. Na rozdíl od kprobes a kretprobes nový mechanismus umožňuje použít jeden zpracovatel pro více funkcí současně.
    • Byla ukončena podpora starých procesorů ARM (ARMv4 a ARMv5), které nejsou vybaveny řídicím blokem paměti (MMU). Podpora systémů ARMv7-M bez MMU byla zachována.
    • Byla ukončena podpora RISC-podobné architektury NDS32, která byla používána v procesorech společnosti Andes Technologies. Kód byl odstraněn z důvodu nedostatku údržby a nevhodnosti podpory NDS32 v hlavním jádře Linuxu (zbývající uživatelé používají specializované sestavení jádra od výrobců vybavení).
    • Ve výchozím nastavení byla vypnuta kompilace jádra s podporou formátu spustitelných souborů a.out pro architektury alpha a m68k, ve kterých se tento formát stále používá. Je pravděpodobné, že podpora zastaralého formátu a.out bude v brzké době z jádra zcela odstraněna. Plány na odstranění formátu a.out se diskutují od roku 2019.
    • Pro architekturu PA-RISC byla implementována minimální podpora mechanismu vDSO (virtual dynamic shared objects), který poskytuje omezenou sadu systémových volání dostupných v uživatelském prostoru bez přepínání kontextu. Podpora vDSO umožnila implementaci možnosti spuštění s neproveditelným zásobníkem.
    • Byla přidána podpora mechanismu Intel HFI (Hardware Feedback Interface), který umožňuje hardwaru předávat jádru informace o aktuálním výkonu a energetické účinnosti každého CPU.
    • Byl přidán ovladač pro mechanismus Intel SDSi (Software-Defined Silicon), který umožňuje spravovat aktivaci dodatečných funkcí v procesoru (například specializované instrukce a dodatečná cache). Myšlenkou je, že čipy s blokovanými rozšířenými funkcemi mohou být dodány za nižší cenu a tyto dodatečné funkce mohou být poté „dokoupeny“ a aktivovány bez hardwarové výměny čipu.
    • Byl přidán ovladač amd_hsmp pro podporu rozhraní AMD HSMP (Host System Management Port), které poskytuje přístup k funkcím správy procesoru prostřednictvím souboru speciálních registrů, které se objevily v serverových procesorech AMD EPYC počínaje generací Fam19h. Například prostřednictvím HSMP lze získat údaje o spotřebě energie a teplotě, nastavit omezení frekvence, aktivovat různé režimy zvýšení výkonu a řídit parametry práce paměti.
    • V rozhraní asynchronního vstupu/výstupu io_uring byla zavedena možnost IORING_SETUP_SUBMIT_ALL pro registraci skupiny deskriptorů souborů v kruhovém vyrovnávacím paměti, stejně jako operace IORING_OP_MSG_RING, která umožňuje poslat signál z jednoho kruhového vyrovnávací paměti do druhého.
    • V mechanismu DAMOS (Data Access Monitoring-based Operation Schemes), který umožňuje uvolňovat paměť s ohledem na frekvenci přístupu k paměti, byly rozšířeny možnosti kontroly operací s pamětí z uživatelského prostoru.
    • Byla integrována třetí série patchů s realizací konceptu foliantů stránek paměti (page folios), které připomínají sloučené stránky paměti (compound pages), ale liší se vylepšenou sémantikou a srozumitelnější organizací práce. Použití foliantů zrychluje správu paměti v některých subsystémech jádra. V navržených patchech byla provedena konverze na folianty vnitřních funkcí správy paměti, včetně varianty funkce get_user_pages(). Byla poskytnuta podpora pro vytváření velkých foliantů v kódu anticipace načítání dat.
    • V build systému se objevila podpora proměnných prostředí USERCFLAGS a USERLDFLAGS, pomocí kterých lze předat další příznaky překladači a linkeru.
    • V subsystému eBPF v mechanismu BTF (BPF Type Format), který poskytuje informace pro kontrolu typů v pseudokódu BPF, byla zavedena možnost přidávat anotace k proměnným odkazujícím na oblasti paměti v uživatelském prostoru. Anotace pomáhají systému verifikace BPF kódu kvalitněji identifikovat a kontrolovat přístupy k paměti.
    • Byl navržen nový zpracovatel alokace paměti pro ukládání nahraných BPF programů, který umožňuje efektivnější využívání paměti v situacích nahrávání velkého množství BPF programů.
    • Do systémového volání madvise() byla přidána příznak MADV_DONTNEED_LOCKED, který doplňuje již existující příznak MADV_DONTNEED, prostřednictvím kterého lze jádru předem oznámit, že se chystá uvolnění bloku paměti, tj. že tento blok není již potřebný a může být použit jádrem. Na rozdíl od MADV_DONTNEED je použití příznaku MADV_DONTNEED_LOCKED přípustné pro zablokované stránky paměti v RAM, které jsou při volání madvise odstraněny bez změny svého zablokovaného stavu a v případě následného přístupu k bloku a generace „page fault“ se vracejí se zachováním vazby. Dále byla přidána úprava, která umožňuje použít příznak MADV_DONTNEED s velkými stránkami paměti v HugeTLB.
  • Virtualizace a bezpečnost
    • Pro architekturu x86 byla přidána podpora mechanismu ochrany toku vykonávání příkazů Intel IBT (Indirect Branch Tracking), který brání použití technik pro vytváření exploitů pomocí metod návratového orientovaného programování (ROP, Return-Oriented Programming), při kterém je exploit formován ve formě řetězce volání již existujících v paměti kusů strojových instrukcí, končících instrukcí návratu řízení (obvykle to jsou konce funkcí). Podstata realizované ochrany spočívá v blokování nepřímých skoků do těla funkce přidáním speciální instrukce ENDBR na začátek funkce a povolení provádění skrze nepřímý skok pouze v případě skoku na tuto instrukci (nepřímé volání přes JMP a CALL musí vždy směřovat na instrukci ENDBR, která je umístěna na samém začátku funkce).
    • Byla zavedena přísnější kontrola mezí bufferů ve funkcích memcpy(), memmove() a memset(), prováděná na fázi kompilace při zapnutí režimu CONFIG_FORTIFY_SOURCE. Přidaná úprava spočívá v kontrole překročení mezí elementů struktur, jejichž velikost je známá. Uvádí se, že realizovaná možnost by umožnila zablokovat všechna související s memcpy() překročení bufferu v jádře, identifikovaná minimálně za poslední tři roky.
    • Byla přidána druhá část kódu aktualizované implementace generátoru pseudonáhodných čísel RDRAND, která odpovídá za funkci zařízení /dev/random a /dev/urandom. Nová implementace se vyznačuje unifikací práce /dev/random a /dev/urandom, přidáním ochrany proti vzniku duplicit v toku náhodných čísel při spuštění. virtuálních strojů a přechodem na používání hashovací funkce BLAKE2s namísto SHA1 pro operace míchání entropie. Tato změna umožnila zvýšit bezpečnost generátoru pseudonáhodných čísel díky zbavení se problematického algoritmu SHA1 a vyloučení přepisování inicializačního vektoru RNG. Protože algorithmus BLAKE2s překonává SHA1 z hlediska výkonu, má jeho využití také pozitivní dopad na výkon.
    • Pro architekturu ARM64 byla přidána podpora nového algoritmu autentizace ukazatelů — „QARMA3“, který je rychlejší než algoritmus QARMA při zachování adekvátní úrovně ochrany. Tato technologie umožňuje využití specializovaných instrukcí ARM64 pro kontrolu návratových adres s pomocí digitálních podpisů, které jsou uloženy v nevyužitých horních bitech samotného ukazatele.
    • Pro architekturu ARM64 byla implementována podpora kompilace s povolením režimu ochrany proti přepsání návratové adresy z funkce v případě přetečení bufferu na stacku v GCC 12. Podstata ochrany spočívá v uložení adresy návratu do odděleného „stínového“ stacku po předání řízení funkci a v extrakci této adresy před opuštěním funkce.
    • Byla přidána nová úložiště klíčů (keyring) — „machine“, obsahující klíče vlastníka systému (MOK, Machine Owner Keys), které jsou podporovány v shim zaváděči. Tyto klíče mohou být použity k podepisování digitálních podpisů komponentů jádra, které jsou načteny po počátečním zavedení (například moduly jádra).
    • Byla odstraněna podpora asymetrických soukromých klíčů pro TPM, které byly navrženy ve zastaralé verzi TPM, obsahují známé bezpečnostní problémy a v praxi se neujaly.
    • Byla přidána ochrana dat typu size_t před přetečením celých čísel. V kódu jsou použity zpracovatele size_mul(), size_add() a size_sub(), které umožňují bezpečně provádět násobení, sčítání a odčítání velikostí typu size_t.
    • Při sestavování jádra byly zahrnuty příznaky „-Warray-bounds“ a „-Wzero-length-bounds“, které generují upozornění při překročení indexu za hranice pole a při používání polí nulové délky.
    • Do zařízení virtio-crypto byla přidána podpora šifrování pomocí algoritmu RSA.
  • Síťová subsystém
    • Do implementace síťových mostů byla přidána podpora režimu uzamčení portů (locked mode), ve kterém uživatel může posílat provoz přes port pouze s povolenou MAC adresou. Také byla přidána možnost použití několika struktur pro hodnocení stavu protokolu STP (Spanning Tree Protocol). Dříve mohla být pro VLAN prováděna pouze přímá vazba na STP (1:1), kdy každý VLAN byl spravován nezávisle. V nové verzi byl přidán parametr mst_enable, při jehož aktivaci je stav VLAN kontrolován modulem MST (Multiple Spanning Trees) a vazba VLAN může odpovídat modelu M:N.
    • Pokračuje práce na integraci do síťového zásobníku prostředků pro sledování příčin odmítnutí paketů (kódy reason). Kód příčiny je předáván během uvolnění paměti spojené s paketem a umožňuje brát v úvahu takové situace, jako je odmítnutí paketu z důvodu chyb při vyplnění polí v hlavičce, detekce spoofingu filtrem rp_filter, nesprávná kontrolní suma, nedostatek paměti, aktivace pravidel IPSec XFRM, nesprávné pořadové číslo TCP atd.
    • Byla poskytnuta možnost přenosu síťových paketů z BPF programů spuštěných z uživatelského prostoru v režimu BPF_PROG_RUN, kde se BPF programy vykonávají v jádře, ale vrací výsledek do uživatelského prostoru. Pakety jsou přenášeny pomocí subsystému XDP (eXpress Data Path). Podporován je živý režim zpracování paketů, při kterém může XDP zpracovatel na místě přesměrovávat síťové pakety do síťového zásobníku nebo na jiná zařízení. Také je možné vytvářet programové generátory externího provozu nebo vkládat síťové rámce do síťového zásobníku.
    • Pro BPF programy připojované k síťovým cgroups byly navrženy pomocné funkce pro explicitní nastavení hodnoty vracené systémovými voláními, což umožňuje předat úplnější informace o příčinách blokování systémového volání.
    • Do pod systému XDP (eXpress Data Path) byla přidána podpora fragmentovaných paketů umístěných v několika bufferech, což umožňuje zpracování jumbo rámců a použití TSO/GRO (TCP Segmentation Offload/Generic Receive Offload) pro XDP_REDIRECT.
    • Proces odstraňování síťových prostorů názvů byl značně urychlen, což bylo požadováno v některých velkých systémech s vysokým objemem provozu.
  • Hardware
    • Ve vytěračném ovladači amdgpu je výchozí aktivována technologie adaptivní synchronizace FreeSync, která umožňuje upravovat frekvenci obnovování obrazovky, zajišťující plynulost a nepřerušované zobrazení během her a sledování videa. Byla deklarována stabilní podpora GPU Aldebaran.
    • V ovladači i915 byla přidána podpora čipů Intel Alder Lake N a diskrétních grafických karet Intel DG2-G12 (Arc Alchemist).
    • V ovladači nouveau byla zajištěna podpora vyšších bitrates pro rozhraní DP/eDP a podpora prodlužovačů kabelu lttprs (Link-Training Tunable PHY Repeaters).
    • V pod systému drm (Direct Rendering Manager) byla v ovladačích armada, exynos, gma500, hyperv, imx, ingenic, mcde, mediatek, msm, omap, rcar-du, rockchip, sprd, sti, tegra, tilcdc, xen a vc4 přidána podpora parametru nomodeset, který umožňuje deaktivaci přepínání video režimů na úrovni jádra a použití prostředků pro hardwarovou akceleraci vykreslování, přičemž ponechává pouze funkcionalitu spojenou se systémovým framebifferem.
    • Byla přidána podpora ARM SoC Qualcomm Snapdragon 625/632 (používáno ve smartphonech LG Nexus 5X a Fairphone FP3), Samsung Exynos 850, Samsung Exynos 7885 (používáno v Samsung Galaxy A8), Airoha (Mediatek/EcoNet) EN7523, Mediatek mt6582 (tablet Prestigio PMT5008 3G), Microchip Lan966, Renesas RZ/G2LC, RZ/V2L, Tesla FSD, TI K3/AM62 a i.MXRTxxxx.
    • Byla přidána podpora ARM zařízení a desek Broadcom (Raspberry Pi Zero 2 W), Qualcomm (Google Herobrine R1 Chromebook, SHIFT6mq, Samsung Galaxy Book2), Rockchip (Pine64 PineNote, Bananapi-R2-Pro, STM32 Emtrion emSBS, Samsung Galaxy Tab S, tablet Prestigio PMT5008 3G), Allwinner (A20-Marsboard), Amlogic (Amediatek X96-AIR, CYX A95XF3-AIR, Haochuangy H96-Max, Amlogic AQ222 a OSMC Vero 4K+), Aspeed (Quanta S6Q, ASRock ROMED8HM3), Marvell MVEBU/Armada (Ctera C200 V1 a V2 NAS), Mstar (DongShanPiOne, Miyoo Mini), NXP i.MX (Protonic PRT8MM, emCON-MX8M Mini, Toradex Verdin, Gateworks GW7903).
    • Byla přidána podpora zvukových systémů a kodeků AMD PDM, Atmel PDMC, Awinic AW8738, i.MX TLV320AIC31xx, Intel CS35L41, ESSX8336, Mediatek MT8181, nVidia Tegra234, Qualcomm SC7280, Renesas RZ/V2L, Texas Instruments TAS585M. Byla přidána počáteční implementace zvukového ovladače pro DSP čip Intel AVS. Byla aktualizována podpora ovladačů pro Intel ADL a Tegra234 a byly provedeny změny ke zlepšení podpory zvuku na zařízeních Dell, HP, Lenovo, ASUS, Samsung a Clevo.

    Latinskoamerický fond pro svobodný software zároveň vytvořil plně svobodnou verzi jádra 5.18 — Linux-libre 5.18-gnu, zbavenou prvků firmwaru a ovladačů obsahujících nesvobodné komponenty nebo části kódu, jejichž použití je omezeno výrobcem. V nové verzi byly vyčištěny ovladače pro MIPI DBI panely, VPU Amphion, WiFi MediaTek MT7986 WMAC, Mediatek MT7921U (USB) a Realtek 8852a/8852c, zvukové čipy Intel AVS a Texas Instruments TAS5805M. Taktéž bylo provedeno čištění DTS souborů pro různé SoC Qualcomm s procesory založenými na architektuře AArch64. Byl aktualizován kód pro čištění blobů v ovladačích a subsystémech AMD GPU, MediaTek MT7915, Silicon Labs WF200+ WiFi, Mellanox Spectrum Ethernet, Realtek rtw8852c, Qualcomm Q6V5, Wolfson ADSP a MediaTek HCI UART.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster