Portál AbcLinuxu, 5. května 2025 11:25
Stav vydání jádra. Cook: Bezpečnostní záležitosti v Linuxu 4.13. Citát týdne: lguest nám bude chybět. Přehledově: Omezovače rychlosti CPU a vzdálená zpětná volání a Změna notifikátoru MMU na poslední chvíli.
Jádro 4.13 je venku, vyšlo 3. září. Stěžejní vlastnosti tohoto vydání zahrnují tvrzení jádra pomocí randomizace rozvržení struktur v paměti, nativní podporu protokolu TLS, lepší odkládání velkých stránek, vylepšenou obsluhu chyb při zpětném zápisu, lepší podporu asynchronního I/O, lepší správu napájení díky predikci následujících přerušení, eliminaci nástrojů DocBook ke generování formátované dokumentace a další. V oznámení je explicitně zmíněna ještě jedna změna: „Příslušná změna spočívá v prostém přepnutí výchozího chování cifs: již nebude výchozí SMB 1.0 (které byste opravdu používat neměli: vygooglete si ‚stop using SMB1‘ nebo něco podobného), nýbrž výchozí volbou pro připojení cifs bude modernější SMB 3.0.“
Začleňovací okno 4.14 bylo otevřeno. V době psaní tohoto článku bylo začleněno na 6 200 sad změn.
Stabilní aktualizace: 4.9.47, 4.4.86 a 3.18.69 byly vydány 2. září. 7. září je pak následovaly aktualizace 4.12.11, 4.9.48, 4.4.87 a 3.18.70.
Greg Kroah-Hartman zopakoval, že 4.14 (pravděpodobně) bude příštím jádrem s dlouhodobou podporou.
Kees Cook vyzdvihuje změny v jádře 4.13 týkající se bezpečnosti. „Daniel Micay vytvořil variantu FORTIFY_SOURCE z glibc, tedy novou ochranu při překladu a za běhu, která slouží k vyhledávání přetečení v častých funkcích pro manipulaci s řetězci (např. strcpy, strcmp) a pamětí (např. memcpy, memcmp). Myšlenka spočívá v tom, že překladač už zná velikost řady bufferovaných argumentů, a tak může zahrnout kontrolu přetečení bufferu. Když jsou všechny velikosti známy už při překladu, překladač tím pádem může ukončit sestavení selháním, místo aby pokračoval s prokazatelným přetečením. Když jsou známy jen některé velikosti (např. cíl je znám už při překladu, ale zdroj jen za běhu), přidají se kontroly za běhu, aby odchytily všechny možné případy, ve kterých může dojít k přetečení. Díky tomu bylo odhaleno několik míst, kde docházelo k menším únikům, a s Danielem jsme opatřili příslušné opravy.“
Lguest je dobrodružství, jehož Hrdinou jsi ty, čtenáři. Těžko si vzpomínám na jiné projekty o 5000 řádek, které by nabízely takové možnosti a zároveň náhledy do budoucnosti. Je to vzrušující chvíle na to, ponořit se do kódu! Ale pozor! Je to náročná cesta na několik hodin, ne-li víc. A jak víme, všichni správní Hrdinové jsou vedeni Vznešeným Cílem. Proto každý, kdo projde celou tuto dokumentaci, má u mě Pivo (nebo ekvivalent).
CPU frequency governors and remote callbacks. Viresh Kumar. 4. září 2017
Do jádra 4.14 se dostane důležitá optimalizace, která by měla pomoci budoucím zařízením reagovat s menší latencí, ale zároveň šetřit energii.
Jaderné omezovače rychlosti CPU (CPU frequency governors) dříve byly pouze reaktivní – regulovaly výkon na základě aktivity v minulosti – a řídily jednotlivé procesory v systému nezávisle. Později přibyla možnost spolupráce s plánovačem, a tedy proaktivní chování, ale pouze při změně lokální fronty procesů. Novinkou je spolupráce mezi CPU (pokud to architektura umožňuje), aby byly uspokojeny úlohy, které vyžadují co nejmenší latenci, např. vykreslování uživatelské rozhraní Androidu.
A last-minute MMU notifier change. Jonathan Corbet. 5. září 2017
Popis problémů s API, které málem zdržely vydání Linuxu 4.13.
Jednotka pro správu paměti (memory-management unit, MMU) se stará o překlad mezi virtuálními a fyzickými adresami, oprávnění pro přístup k paměti, přítomnost fyzických stránek v paměti atd. Dříve byla dobře abstrahovaná a vývojáři se nemuseli starat o podrobnosti v ní ukryté. To se ale změnilo s rozšířením virtualizace, výpočtů na GPU aj.
Proto v jádře 2.6.27 přibyl notifikační mechanismus MMU, který umožnil libovolnému subsystému vyžádat si od MMU zprávu o změně stránek procesu. Praktická implementace spočívala v upozornění, že byla zneplatněna buď konkrétní stránka, nebo rozsah paměti.
V kandidátovi na vydání 4.13 byla objevena chyba, která vedla k pádu systému, na němž bylo provozováno KVM. Problém spočíval v záměně zpětných volání upozorňujících na neplatnost stránky, resp. rozsahu paměti. Prvnímu je totiž umožněno se uspat (sleep), druhému nikoliv – přitom uspání není povoleno, když je zabrán spinlock, a tak použití notifikace na zneplatnění stránky vede k riziku souběhu (race condition).
To vyústilo ve snahu zcela se zbavit notifikace umožňující uspání, a opravdu se tak stalo na poslední chvíli před vydáním 4.13. Moduly, které na toto zpětné volání spoléhají, tím pádem musejí být přepsány, aby fungovaly s novým jádrem.
#define STATUS_VIRUS_INFECTED __constant_cpu_to_le32(0xC0000906)
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.