Po dvou měsících vývoje Linus Torvalds představil uvolnění jádra Linux 5.13. Mezi nejvýznamnější změny patří: souborový systém EROFS, počáteční podpora čipů Apple M1, cgroup kontroler „misc“, ukončení podpory /dev/kmem, podpora nových GPU Intel a AMD, možnost přímého volání funkcí jádra z BPF programů, randomizace zásobníku jádra pro každý systémový hovor, možnost sestavení v Clang s ochranou CFI (Control Flow Integrity), LSM modul Landlock pro dodatečné omezení procesů, virtuální zvukové zařízení na bázi virtio, multi-shot režim v io_uring.
Do nové verze bylo přijato 17189 oprav od 2150 vývojářů (nejvíce v historii), velikost patche – 60 MB (změny zasáhly 12996 souborů, přidáno 794705 řádků kódu, odstraněno 399590 řádků). Přibližně 47 % všech změn v 5.13 se týká ovladačů zařízení, asi 14 % změn se vztahuje k aktualizaci kódu specifického pro hardwarové architektury, 13 % je spojeno se síťovým stackem, 5 % – s souborovými systémy a 4 % s vnitřními subsystémy jádra.
Hlavní novinky:
- Diskový subsystém, vstup/výstup a souborové systémy
- Byla přidána podpora souborového systému EROFS (Enhanced Read-Only File System), který navrhla společnost Huawei pro použití na oddílech dostupných v režimu pouze pro čtení. Nový systém podporuje uchovávání dat ve zhuštěné podobě a ve srovnání s Ext4 vykazuje podobný výkon při provádění operací sekvenčního čtení, ale několikanásobně předčí Ext4 při náhodném přístupu k datům. Například při úrovni komprese 4 a testování na serveru s pevným diskem systém EROFS překonal Ext4 v operacích náhodného čtení více než šestkrát, a při použití smartphonu Android s Flash téměř třikrát. Stejně jako v jiných read-only souborových systémech je struktura EROFS výrazně zjednodušena díky vynechání některých oblastí metadata, jako je bitmapa volných bloků.
- Pro souborový systém SMB3 byla implementována možnost montáže „rasize“, pomocí které lze určit velikost okna pro čtení dopředu (readahead) za účelem zvýšení výkonu některých typů zátěže.
- V systému ext4 byla zajištěna překreslení prvků adresářů při odstraňování souborů. V ext4 je také povoleno současné používání režimu bez ohledu na velikost písmen a šifrování.
- Ve файловé sadě exFAT byla přidána podpora příkazu ioctl FITRIM (discard), který informuje úložiště o nevyužívaných blocích v systému souborů.
- Ve файловé sadě XFS byla přidána možnost uvolnění místa z poslední skupiny alokace ve FS, což se stalo prvním krokem v realizaci funkce zmenšení velikosti existujících oddílů se systému souborů XFS.
- Byl přidán nový systémový volání quotactl_path, které se liší od quotactl tím, že umožňuje spravovat kvóty nikoli prostřednictvím speciálního zařízení, ale zadáním cesty k bodu připojení FS.
- V mechanismu fanotify byly rozšířeny možnosti dostupné pro nepřihlášené uživatele. Například podobně jako v inotify je nyní možné bez práv SYS_CAP_ADMIN sledovat události OPEN, ACCESS, MODIFY a CLOSE pro soubory a adresáře.
- Paměť a systémové služby
- Byl přidán nový kontroler cgroup - „Misc“ (CONFIG_CGROUP_MISC), určený k omezení a sledování skalarových zdrojů, které lze řídit pomocí jednoduchého počítadla a omezit nastavováním maximálních hodnot. Jako příklad použití nového kontroleru cgroup se zmiňuje správa identifikátorů adresního prostoru, které se používají v mechanismu AMD SEV (Secure Encrypted Virtualization).
- V rozhraní asynchronního vstupu/výstupu io_uring byl pro žádosti POLL implementován režim „multi-shot“, při kterém POLL není odstraněn po vygenerování události, ale zůstává aktivní a může generovat více událostí.
- Z realtime-větve jádra byl přesunut kód, který zajišťuje zpracování softwarově generovaných přerušení v jádrových vláknech, což umožňuje jejich nahrazení prioritnějšími procesy.
- Byla přidána interní knihovna netfs, do které byly vyčleněny typové funkce používané v síťových souborových systémech.
- Pro architekturu PowerPC byla implementována podpora prostorů jmen pro čas (time namespaces), která umožňuje v kontejneru používat svůj vlastní čas.
- Pro architekturu RISC-V byla implementována podpora kexec, crash dump, kprobe a spuštění jádra přímo (execute-in-place, provádění z původního média bez kopírování do RAM).
- V BPF programech pro trasování se objevila možnost použití úložiště dat lokalizovaného pro úlohu (task-local storage), které poskytuje vyšší výkon díky přiřazení dat konkrétnímu BPF zpracovateli.
- Byl zaveden nový mechanismus pro přímé volání funkcí jádra z programů BPF, který již byl použit při implementaci algoritmů přetížení TCP. Pro zajištění bezpečnosti musí být volané funkce výslovně uvedeny v bílém seznamu.
- Do systému sledování funkcí ftrace byla přidána možnost func-no-repeats, která umožňuje zaznamenávat opakující se sekvenční volání funkce formou čítače.
- Do systémového volání userfaultfd(), určeného pro zpracování page faults (přístupy k nepřiděleným stránkám paměti) v prostoru uživatele, byla přidána možnost správy částečných faultů, kdy stránka paměti existuje, ale není záznam v tabulce stránek paměti.
- Byla ukončena podpora speciálního souboru /dev/kmem, pomocí kterého je možné přistupovat ke všemu adresnímu prostoru jádra. Tento soubor byl uznán za zastaralý a vytvářející bezpečnostní problémy.
- Pro čipy Intel byl zaveden nový ovladač pro správu chlazení, který umožňuje snižovat frekvenci procesoru v případě nebezpečí přehřátí. Na rozdíl od stávajícího mechanismu aktivace TCC (Thermal Control Circuit) nový ovladač manipuluje s relativními hodnotami, tj. může snížit frekvenci na začátku výrazného nárůstu teploty, aniž by čekal na překročení kritické prahové hodnoty.
- Virtualizace a bezpečnost
- Do složení byl zahrnut LSM modul pro zajištění izolace aplikací Landlock, který umožňuje omezit interakci s externím prostředím skupiny procesů a byl vyvinut s ohledem na takové mechanismy izolace, jako jsou XNU Sandbox, FreeBSD Capsicum a OpenBSD Pledge/Unveil. Logika poskytování přístupu je určena pomocí BPF programu, ale na rozdíl od seccomp-bpf, Landlock nefiltruje systémové volání a jejich argumenty, ale umožňuje omezit použití objektů jádra, jako jsou hierarchie souborů. Pomocí Landlocku může každý proces, včetně nepřivilegovaných, bezpečně izolovat sám sebe a zabránit obcházení izolace v případě zjištění zranitelností nebo škodlivých změn v aplikaci. Landlock umožňuje procesu vytvářet chráněná izolovaná prostředí, implementovaná ve formě další vrstvy nad stávajícími systémovými mechanismy řízení přístupu. Například program může zakázat přístup k souborům mimo pracovní adresář.
- Byla přidána funkce náhodného posunu ve stacku jádra při zpracování systémových volání, aby se ztížily útoky na stack. Podstata navrhované ochrany spočívá ve výběru náhodného posunu stacku při každém systémovém volání, což ztěžuje určení rozložení stacku v paměti, i když jsou k dispozici informace o adresách, protože při dalším systémovém volání se základní adresa stacku změní. Pro aktivaci náhodného posunu byly navrženy parametry příkazové řádky jádra „randomize_kstack_offset=on/off“ a nastavení CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT. Odhadované náklady se pohybují kolem 1 % ztráty výkonu.
- Byla přidána podpora sestavení jádra s aktivací mechanismu ochrany CFI (Control Flow Integrity) v kompilátoru Clang, který přidává před každým nepřímým voláním funkce kontroly pro identifikaci některých forem nedefinovaného chování, které mohou potenciálně vést k narušení normálního pořadí vykonávání (control flow) v důsledku použití exploitů, které mění v paměti uložené ukazatele na funkce. Pro aktivaci CFI byl navržen parametr CONFIG_CFI_CLANG.
- V poskytovaném jádrem službě pro ukládání šifrovacích klíčů (key ring) nyní mechanismus důvěryhodných klíčů (Trusted Keys) zahrnuje nejen klíče z modulů TPM, ale i z prostředí TEE (Trusted Execution Environment). Pro správu zdroje důvěryhodných klíčů byl navržen spouštěcí parametr „trusted.source“. Navíc byla přidána možnost zpracování důvěryhodných klíčů ve formátu ASN.1.
- Byl přidán parametr pro proaktivní načítání seznamu odvolaných certifikátů během zavádění jádra. Byla vyřešena chyba (CVE-2020-26541) s ignorováním černého seznamu certifikátů Secure Boot UEFI dodaných ve formátu EFI_CERT_X509_GUID, což umožnilo zavést systém s odvolaným certifikátem.
- Do kryptosystému jádra byla přidána podpora pro ověřování digitálních podpisů ECDSA založených na eliptických křivkách.
- Byla implementována možnost ověřování politik SELinux pomocí subsystému IMA (Integrity Measurement Architecture), který zajišťuje udržování databáze hashů pro kontrolu integrity dat.
- Síťová subsystém
- Byla zrušena podpora technologie WiMAX, která již není používána v veřejných sítích, a v jádře zůstává jediným ovladačem, s nímž lze používat WiMAX, zastaralý ovladač Intel 2400m. V síťovém konfigurovači NetworkManager byla podpora WiMAX ukončena v roce 2015. V současné době je WiMax prakticky zcela vytlačena takovými technologiemi, jako jsou LTE, HSPA+ a Wi-Fi 802.11n.
- Byl přidán ovladač pro síťový adaptér MANA (Microsoft Azure Network Adapter).
- Do ovladače ath11k byla přidána podpora bezdrátových modulů Qualcomm QCN9074 s podporou 802.11ax.
- V ovladači iwlwifi byla implementována možnost pasivního skenování kanálů v pásmu 6GHz. Pro Ukrajinu byla přidána podpora zapnutí/vypnutí IEEE 802.11ax na základě parametrů v BIOSu.
- Byla provedena optimalizace subsystému XDP (eXpress Data Path), která umožňuje manipulaci se síťovými pakety ve stádiu před jejich zpracováním síťovým stekem jádra Linux. Prováděné testy vykazují zvýšení výkonu XDP o 4-8%. Pro zařízení virtio může nárůst výkonu softwarového zpracování AF_XDP dosahovat 33%.
- V ICMP byla implementována podpora rozšířených PROBE zpráv definovaných v RFC 8335.
- Pokračuje integrace rozšíření protokolu TCP MPTCP (MultiPath TCP) do jádra pro organizaci TCP připojení s doručováním paketů současně několika různými trasami prostřednictvím různých síťových rozhraní, připojených k různým. IP adresy. V nové verzi byla přidána podpora sockopt pro nastavení typových voleb TCP. Byla implementována možnost resetování jednotlivých subprocesů (subflow).
- V netfilter byla přidána podpora správy zdrojů pomocí sjednocené hierarchie cgroups v2.
- V ethtool byl implementován rozhraní pro čtení statistik IEEE MIB s podporou mlx5 a bnxt. Síťovým ovladačům bylo povoleno získávání libovolných dat z SFP EEPROM, manipulujícími nikoli párováním offset + velikost, ale stránkami paměti.
- Hardware
- Byla implementována počáteční podpora ARM čipu Apple M1, zahrnující řadič přerušení, časovač, UART, SMP, funkce pro organizaci vstupu/výstupu a MMIO. Zpětné inženýrství GPU zatím nebylo dokončeno, pro organizaci výstupu je poskytována podpora rámcového bufferu a konzole přes sériový port.
- Pokračuje čištění jádra od starých ovladačů, byly odstraněny ovladače "gasket" (Google ASIC), "sysace", "umem" a několik starých ovladačů pro sériové porty.
- Po 13 letech ve větvi staging byl stabilizován a přesunut do hlavního větvení ovladač „comedi“ pro podporu datových sběrnic.
- Byl přidán ovladač GUD (Generic USB Display) s implementací základního ovladače pro obrazovky a TV adaptéry připojitelné přes rozhraní USB. Ovladač poskytuje vlastnosti DRM (Direct Rendering Manager) pro rotaci obrazu, řízení jasu, přístup k EDID, nastavení video režimů a připojení TV, které mohou sloužit jako základ pro vytváření ovladačů pro specifická zařízení.
- Byl přidán zvukový ovladač „virtio“ s implementací virtuálního zvukového zařízení, které lze použít v hostitelských systémech pro přehrávání a záznam zvuku bez přenosu přístupu ke zvukové kartě a bez emulace.
- Do ovladače amdgpu byla přidána počáteční podpora GPU Aldebaran (gfx90a). Byla aktivována počáteční podpora technologie adaptivní synchronizace FreeSync pro HDMI (dříve dostupná pro DisplayPort), která umožňuje upravit obnovovací frekvenci zobrazení. Byla přidána podpora ASSR (Alternate Scrambler Seed Reset). Přidán ioctl pro dotazy na schopnosti související s kódováním a dekódováním videa. Byl přidán režim CONFIG_DRM_AMD_SECURE_DISPLAY pro detekci změn na displejích zobrazujících kritické informace. Přidána podpora mechanismu úspory energie ASPM.
- Do ovladače i915 pro grafické karty Intel byla přidána podpora čipů Intel Alderlake-S. Přidána podpora eDP MSO (Embedded DisplayPort Multi-SST Operation).
- Byla přidána podpora herního ovladače Luna (Amazon) a také dotykových obrazovek Hycon HY46XX, ILITEK Lego Series a MStar MSG2638.
Zároveň latinskoamerická Nadace svobodného softwaru vytvořila verzi zcela svobodného jádra 5.11 — Linux-libre 5.11-gnu, vyčištěného od prvků firmwaru a ovladačů obsahujících nesvobodné komponenty nebo části kódu, jejichž použití je omezeno výrobcem. V nové vydání byl proveden úklid ovladače comedi. Bylo ukončeno čištění ovladačů cyclades, isicom tty a i2400m wimax, které byly odstraněny z jádra. Kód pro úklid blobů v ovladačích a subsystémech amdgpu, i915 csr, r8152 usb, mhi bus, x86 touchscreen a qualcomm arm64 byl aktualizován.
Zdroj: opennet.ru
