Vydání jádra Linux 6.2

Po dvou měsících vývoje představil Linus Torvalds vydání linuxového jádra 6.2. Mezi nejpozoruhodnější změny: je povoleno přijímání kódu pod licencí Copyleft-Next, je vylepšena implementace RAID5/6 v Btrfs, pokračuje integrace podpory jazyka Rust, snižuje se režie ochrany před útoky Retbleed, přidána schopnost regulovat spotřebu paměti při zpětném zápisu, přidán mechanismus pro vyvažování TCP PLB (Protective Load Balancing), přidán mechanismus ochrany hybridního toku příkazů (FineIBT), BPF má nyní možnost definovat vlastní objekty a datové struktury , je zahrnuta utilita rv (Runtime Verification), spotřeba energie při implementaci zámků RCU byla snížena.

Nová verze obsahuje 16843 2178 oprav od 62 14108 vývojářů, velikost opravy je 730195 MB (změny se dotkly 409485 42 souborů, bylo přidáno 6.2 16 řádků kódu, smazáno 12 4 řádků). Přibližně 3 % 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ýká souborových systémů a XNUMX % souvisí s vnitřními subsystémy jádra.

Klíčové inovace v jádře 6.2:

  • Paměťové a systémové služby
    • Je povoleno zahrnout do kódu jádra a změny poskytované v rámci licence Copyleft-Next 0.3.1. Licence Copyleft-Next byla vytvořena jedním z autorů GPLv3 a je plně kompatibilní s licencí GPLv2, jak potvrdili právníci ze SUSE a Red Hat. Ve srovnání s GPLv2 je licence Copyleft-Next mnohem kompaktnější a srozumitelnější (byla odstraněna úvodní část a zmínka o zastaralých kompromisech), definuje časový rámec a postup eliminace porušení a automaticky odstraňuje požadavky na copyleft u zastaralého softwaru, který je starší 15 let.

      Copyleft-Next také obsahuje klauzuli o udělení proprietární technologie, která na rozdíl od GPLv2 činí tuto licenci kompatibilní s licencí Apache 2.0. Aby byla zajištěna plná kompatibilita s GPLv2, Copyleft-Next výslovně uvádí, že kromě původní licence Copyleft-Next může být poskytováno odvozené dílo pod licencí GPL.

    • Struktura zahrnuje obslužný program „rv“, který poskytuje rozhraní pro interakci z uživatelského prostoru s obslužnými programy subsystému RV (Runtime Verification), určený ke kontrole správného provozu na vysoce spolehlivých systémech, které zaručují absenci poruch. Ověření se provádí za běhu připojením obslužných programů ke trasovacím bodům, které kontrolují skutečný průběh provádění oproti předem určenému referenčnímu deterministickému modelu stroje, který definuje očekávané chování systému.
    • Zařízení zRAM, které umožňuje uložit swapovací oddíl do paměti v komprimované podobě (v paměti je vytvořeno blokové zařízení, do kterého se provádí swapování s kompresí), implementuje schopnost přebalit stránky pomocí alternativního algoritmu pro dosažení vyšší úrovně. komprese. Hlavní myšlenkou je poskytnout výběr mezi několika algoritmy (lzo, lzo-rle, lz4, lz4hc, zstd), které nabízejí vlastní kompromisy mezi rychlostí komprese/dekomprese a úrovní komprese, nebo optimální ve speciálních situacích (například pro kompresi velkých stránky paměti).
    • Přidáno API "iommufd" pro správu systému správy I/O paměti - IOMMU (I/O Memory-Management Unit) z uživatelského prostoru. Nové API umožňuje spravovat tabulky stránek I/O paměti pomocí deskriptorů souborů.
    • BPF poskytuje možnost vytvářet typy, definovat vlastní objekty, budovat vlastní hierarchii objektů a flexibilně vytvářet vlastní datové struktury, jako jsou propojené seznamy. Pro programy BPF přecházející do režimu spánku (BPF_F_SLEEPABLE) byla přidána podpora pro zámky bpf_rcu_read_{,un}lock(). Implementována podpora pro ukládání objektů task_struct. Přidán typ mapy BPF_MAP_TYPE_CGRP_STORAGE poskytující místní úložiště pro cgroups.
    • Pro blokovací mechanismus RCU (Read-copy-update) je implementován volitelný mechanismus „líných“ volání zpětného volání, ve kterém je zpracováno několik volání zpětných volání najednou pomocí časovače v dávkovém režimu. Aplikace navržené optimalizace nám umožňuje snížit spotřebu energie na zařízeních Android a ChromeOS o 5–10 % odložením požadavků RCU během nečinnosti nebo nízké zátěže systému.
    • Přidán sysctl split_lock_mitigate pro řízení toho, jak systém reaguje, když detekuje rozdělené zámky, ke kterým dochází při přístupu k nezarovnaným datům v paměti kvůli tomu, že data překračují dva řádky mezipaměti CPU při provádění atomické instrukce. Takové blokády vedou k výraznému poklesu výkonu. Nastavení split_lock_mitigate na 0 pouze vydá varování, že došlo k problému, zatímco nastavení split_lock_mitigate na 1 také způsobí zpomalení procesu, který způsobil zámek, aby se zachoval výkon pro zbytek systému.
    • Pro architekturu PowerPC byla navržena nová implementace qspinlock, která vykazuje vyšší výkon a řeší některé problémy se zamykáním, které se objevují ve výjimečných případech.
    • Kód pro obsluhu přerušení MSI (Message-Signaled Interrupts) byl přepracován, čímž byly odstraněny nahromaděné architektonické problémy a přidána podpora pro vazbu jednotlivých obslužných programů na různá zařízení.
    • Pro systémy založené na architektuře instrukční sady LoongArch používané v procesorech Loongson 3 5000 a implementující nový RISC ISA, podobný MIPS a RISC-V, je implementována podpora pro ftrace, ochranu zásobníku, režim spánku a pohotovostního režimu.
    • Byla poskytnuta možnost přiřadit jména oblastem sdílené anonymní paměti (dříve bylo možné přiřadit jména pouze soukromé anonymní paměti přiřazené konkrétnímu procesu).
    • Přidán nový parametr příkazového řádku jádra „trace_trigger“, navržený k aktivaci spouštěče trasování používaného k navázání podmíněných příkazů volaných při spuštění kontroly řízení (například trace_trigger=”sched_switch.stacktrace, pokud prev_state == 2″).
    • Požadavky na verzi balíčku binutils byly zvýšeny. Sestavení jádra nyní vyžaduje alespoň binutils 2.25.
    • Při volání exec() byla přidána možnost umístit proces do časového jmenného prostoru, ve kterém se čas liší od systémového času.
    • Začali jsme přenášet další funkce z větve Rust-for-Linux související s používáním jazyka Rust jako druhého jazyka pro vývoj ovladačů a modulů jádra. Podpora Rust je ve výchozím nastavení zakázána a nevede k tomu, aby byl Rust zahrnut jako povinná závislost sestavení jádra. Základní funkčnost nabízená v posledním vydání je rozšířena o podporu nízkoúrovňového kódu, jako je typ Vec a makra pr_debug!(), pr_cont!() a pr_alert!(), jakož i procedurální makro „#[vtable ]“, což zjednodušuje práci s ukazatelovými tabulkami na funkcích. V budoucích verzích se očekává přidání vysokoúrovňových vazeb Rust nad subsystémy jádra, které umožní vytvoření plnohodnotných ovladačů v Rustu.
    • Typ "char" používaný v jádře je nyní standardně pro všechny architektury deklarován jako unsigned.
    • Mechanismus alokace slab paměti - SLOB (slab allocator), který byl navržen pro systémy s malým množstvím paměti, byl prohlášen za zastaralý. Místo SLOB se za normálních podmínek doporučuje použít SLUB nebo SLAB. Pro systémy s malým množstvím paměti se doporučuje používat SLUB v režimu SLUB_TINY.
  • Diskový subsystém, I/O a souborové systémy
    • Byla provedena vylepšení Btrfs zaměřená na vyřešení problému „zápisové díry“ v implementacích RAID 5/6 (pokus o obnovení RAID, pokud během zápisu dojde k selhání a není možné pochopit, který blok na kterém zařízení RAID byl správně zapsán, což může vést ke zničení bloku, odpovídající upsaným blokům). Disky SSD nyní navíc automaticky povolují asynchronní operaci vyřazování ve výchozím nastavení, pokud je to možné, což umožňuje lepší výkon díky efektivnímu seskupování operací vyřazování do front a zpracování fronty procesorem na pozadí. Vylepšený výkon operací send a lseek, stejně jako ioctl FIEMAP.
    • Byly rozšířeny možnosti správy odloženého zápisu (zpětný zápis, ukládání změněných dat na pozadí) pro bloková zařízení. V některých situacích, například při použití síťových blokových zařízení nebo USB disků, může mít líný zápis za následek velkou spotřebu RAM. Aby bylo možné kontrolovat chování líných zápisů a udržovat velikost mezipaměti stránky v určitých mezích, byly v sysfs (/sys/class/bdi/) zavedeny nové parametry strict_limit, min_bytes, max_bytes, min_ratio_fine a max_ratio_fine.
    • Systém souborů F2FS implementuje operaci atomic replacement ioctl, která umožňuje zapisovat data do souboru v rámci jediné atomické operace. F2FS také přidává mezipaměť rozsahu bloků, která pomáhá identifikovat aktivně používaná data nebo data, ke kterým se dlouho nepřistupovalo.
    • V ext4 FS jsou zaznamenány pouze opravy chyb.
    • Souborový systém ntfs3 nabízí několik nových možností připojení: „nocase“ pro řízení citlivosti na malá a velká písmena v názvech souborů a adresářů; windows_name pro zákaz vytváření názvů souborů obsahujících znaky, které nejsou platné pro Windows; hide_dot_files pro ovládání přiřazení štítku skrytého souboru pro soubory začínající tečkou.
    • Systém souborů Squashfs implementuje možnost připojení „threads=“, která vám umožňuje definovat počet vláken pro paralelizaci dekompresních operací. Squashfs také zavedl možnost mapovat uživatelská ID připojených souborových systémů, která se používá k porovnání souborů konkrétního uživatele na připojeném cizím oddílu s jiným uživatelem na aktuálním systému.
    • Implementace seznamů řízení přístupu POSIX (POSIX ACL) byla přepracována. Nová implementace odstraňuje architektonické problémy, zjednodušuje údržbu kódové základny a zavádí bezpečnější datové typy.
    • Subsystém fscrypt, který se používá pro transparentní šifrování souborů a adresářů, přidal podporu pro šifrovací algoritmus SM4 (čínský standard GB/T 32907-2016).
    • Byla poskytnuta možnost sestavit jádro bez podpory NFSv2 (v budoucnu plánují úplně přestat podporovat NFSv2).
    • Organizace kontroly přístupových práv k zařízením NVMe byla změněna. Poskytuje možnost číst a zapisovat na zařízení NVMe, pokud má proces zápisu přístup k vyhrazenému souboru zařízení (dříve musel mít proces oprávnění CAP_SYS_ADMIN).
    • Odstraněn ovladač balíčku CD/DVD, který byl v roce 2016 zastaralý.
  • Virtualizace a bezpečnost
    • Do procesorů Intel a AMD byla implementována nová metoda ochrany proti zranitelnosti Retbleed, která využívá sledování hloubky hovoru, což nezpomaluje práci tolik jako dříve přítomná ochrana proti Retbleed. Pro aktivaci nového režimu byl navržen parametr příkazového řádku jádra „retbleed=stuff“.
    • Přidán hybridní mechanismus ochrany toku instrukcí FineIBT, který kombinuje použití hardwarových instrukcí Intel IBT (Indirect Branch Tracking) a softwarové ochrany kCFI (kernel Control Flow Integrity) k blokování narušení řídicího toku v důsledku použití exploitů, které mění ukazatele uložené v paměti na funkcí. FineIBT umožňuje provedení nepřímým skokem pouze v případě skoku na instrukci ENDBR, která je umístěna na samém začátku funkce. Navíc, analogicky s mechanismem kCFI, jsou pak kontrolovány hashe, aby byla zaručena neměnnost ukazatelů.
    • Přidána omezení pro blokování útoků, které manipulují s generováním stavů „oops“, po kterých jsou problematické úkoly dokončeny a stav je obnoven bez zastavení systému. Při velmi velkém počtu volání do stavu „jejda“ dochází k přetečení referenčního čítače (refcount), což umožňuje zneužití zranitelností způsobených dereferencemi NULL ukazatelů. Pro ochranu proti takovým útokům byl do jádra přidán limit pro maximální počet spouštěčů „oops“, po jehož překročení jádro zahájí přechod do stavu „panika“ s následným restartem, který neumožní dosažení počet iterací potřebných k přetečení refcountu. Ve výchozím nastavení je limit nastaven na 10 tisíc „oops“, ale v případě potřeby jej lze změnit pomocí parametru oops_limit.
    • Přidány konfigurační parametry LEGACY_TIOCSTI a sysctl legacy_tiocsti pro zakázání možnosti vkládat data do terminálu pomocí ioctl TIOCSTI, protože tuto funkci lze použít k nahrazení libovolných znaků do vstupní vyrovnávací paměti terminálu a simulaci uživatelského vstupu.
    • Je navržen nový typ vnitřní struktury, encoded_page, ve které se spodní bity ukazatele používají k uložení dodatečných informací používaných k ochraně proti náhodné dereferenci ukazatele (pokud je dereference skutečně nezbytná, musí být tyto dodatečné bity nejprve vymazány) .
    • Na platformě ARM64 je ve fázi bootování možné povolit nebo zakázat softwarovou implementaci mechanismu Shadow Stack, který slouží k ochraně před přepsáním návratové adresy z funkce v případě přetečení vyrovnávací paměti na 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 načtení dané adresy před ukončením funkce). Podpora hardwarových a softwarových implementací Shadow Stack v jedné sestavě jádra umožňuje používat jedno jádro na různých systémech ARM, bez ohledu na jejich podporu pokynů pro autentizaci ukazatelů. Zahrnutí softwarové implementace se provádí nahrazením nezbytných instrukcí v kódu během načítání.
    • Přidána podpora pro použití mechanismu asynchronního upozornění na ukončení na procesorech Intel, který umožňuje detekovat jednokrokové útoky na kód spouštěný v enklávách SGX.
    • Je navržena sada operací, která umožňuje hypervizoru podporovat požadavky hostovaných systémů Intel TDX (Trusted Domain Extensions).
    • Nastavení sestavení jádra RANDOM_TRUST_BOOTLOADER a RANDOM_TRUST_CPU bylo odstraněno ve prospěch odpovídajících voleb příkazového řádku random.trust_bootloader a random.trust_cpu.
    • Mechanismus Landlock, který umožňuje omezit interakci skupiny procesů s vnějším prostředím, přidal podporu pro příznak LANDLOCK_ACCESS_FS_TRUNCATE, který umožňuje řídit provádění operací zkracování souborů.
  • Síťový subsystém
    • Pro IPv6 byla přidána podpora PLB (Protective Load Balancing), což je mechanismus vyrovnávání zátěže mezi síťovými spoji zaměřený na snížení přetížení přepínačů datových center. Změnou IPv6 Flow Label PLB náhodně mění cesty paketů, aby vyvážilo zatížení na portech přepínače. Pro snížení přeskupování paketů se tato operace provádí po obdobích nečinnosti, kdykoli je to možné. Použití PLB v datových centrech Google snížilo nerovnováhu zátěže na portech přepínačů v průměru o 60 %, snížilo ztráty paketů o 33 % a snížilo latenci o 20 %.
    • Přidán ovladač pro zařízení MediaTek podporující Wi-Fi 7 (802.11be).
    • Přidána podpora pro 800gigabitové odkazy.
    • Přidána možnost přejmenovávat síťová rozhraní za chodu, bez zastavení práce.
    • Do zpráv protokolu o SYN flood byla přidána zmínka o IP adrese, na kterou paket dorazil.
    • Pro UDP byla implementována možnost používat samostatné hashovací tabulky pro různé síťové jmenné prostory.
    • Pro síťové mosty byla implementována podpora autentizační metody MAB (MAC Authentication Bypass).
    • Pro protokol CAN (CAN_RAW) byla implementována podpora režimu soketu SO_MARK pro připojení filtrů provozu na bázi fwmark.
    • ipset implementuje nový parametr bitmask, který umožňuje nastavit masku na základě libovolných bitů v adrese IP (například "ipset vytvořit set1 hash:ip bitmask 255.128.255.0").
    • Přidána podpora pro zpracování interních hlaviček uvnitř tunelovaných paketů do nf_tables.
  • Оборудование
    • Subsystém „accel“ byl přidán s implementací frameworku pro výpočetní akcelerátory, které mohou být dodávány buď ve formě jednotlivých ASIC nebo ve formě IP bloků uvnitř SoC a GPU. Tyto akcelerátory jsou zaměřeny především na urychlení řešení problémů strojového učení.
    • Ovladač amdgpu obsahuje podporu pro komponenty GC, PSP, SMU a NBIO IP. Pro systémy ARM64 je implementována podpora DCN (Display Core Next). Implementace chráněného výstupu obrazovky byla přesunuta z použití DCN10 na DCN21 a lze ji nyní použít při připojení více obrazovek.
    • Ovladač i915 (Intel) má stabilizovanou podporu pro diskrétní grafické karty Intel Arc (DG2/Alchemist).
    • Ovladač Nouveau podporuje GPU NVIDIA GA102 (RTX 30) založené na architektuře Ampere. U karet nva3 (GT215) přibyla možnost ovládat podsvícení.
    • Přidána podpora bezdrátových adaptérů založených na čipech Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) a MediaTek MT7996, rozhraní Broadcom BCM4377/4378/4387 Bluetooth, stejně jako řadiče Ethernet Motorcomsm8521 a NVIDgra ytXNUMX Motorcoms.
    • Přidána podpora ASoC (ALSA System on Chip) pro vestavěné zvukové čipy HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. Přidána podpora pro zvukové rozhraní Focusrite Saffire Pro 40. Přidán zvukový kodek Realtek RT1318.
    • Přidána podpora pro smartphony a tablety Sony (Xperia 10 IV, 5 IV, X a X compact, OnePlus One, 3, 3T a Nord N100, Xiaomi Poco F1 a Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1.
    • Přidána podpora pro ARM SoC a Apple T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460), SM6375 desky , SDM695 (Snapdragon 670), MSM670 (Snapdragon 8976), MSM652 (Snapdragon 8956), RK650 Odroid-Go/rg3326, Zyxel NSA351S, InnoComm i.MX310MM, Odroid Go Ultra.

Ve stejné době vytvořila Latin American Free Software Foundation verzi zcela svobodného jádra 6.2 - Linux-libre 6.2-gnu, zbavenou prvků firmwaru a ovladačů obsahujících nesvobodné komponenty nebo části kódu, jejichž rozsah je omezený. výrobcem. Nové vydání čistí nové bloby v ovladači nouveau. Načítání objektů blob je zakázáno v ovladačích mt7622, ​​​​mt7996 wifi a bcm4377 bluetooth. Vyčištěné názvy objektů blob v souborech dts pro architekturu Aarch64. Aktualizovaný kód čištění objektů blob v různých ovladačích a podsystémech. Zastavilo se čištění ovladače s5k4ecgx, protože byl odstraněn z jádra.

Zdroj: opennet.ru

Přidat komentář