Portál AbcLinuxu, 6. května 2025 16:43
Stav vydání jádra. Citáty týdne. Klíče ochrany paměti.
Současný vývojový cyklus 4.1-rc3 byl vydán 10. května. Linus: "Testujte. Od -rc3 by nemělo jít o nic ohrožujícího, takže pokud jste již nezkoušeli jednu z předchozích vývojových verzí kernelu, bylo by fajn se ujistit, že vše běží jak má."
Stabilní aktualizace: 3.10.77, 3.14.41, 3.19.7 a 4.0.2 byly vydány 7. května. Verze 3.19.8 (poslední update verze 3.19) následoval 11. května. Aktualizace 4.0.3, 3.14.42 a 3.10.78 vyšly 13. května.
Společnost Canonical oznámila, že bude 3.19 udržovat do konce července 2016.
Nemám rád možnost "vypnout bezpečnost pro výkon", protože Joe SpeedRacer bude vždy upřednostňovat rychlost před bezpečností.
Ingo, mám pocit, žes mi právě dal zdarma štěně...
PR_SET_DATAPLANE, BARE_METAL, NO_INTERRUPTS, NO_HZ_PURE, NO_HZ_LEAVE_ME_THE_FSCK_ALONE, NO_HZ_OVERFLOWING, CONFIG_ISOLATION, PR_SET_NONSTOP...
-Výbor pro pojmenovávání funkcí jádra se sídlem v kůlně na opravu kol
Jednotky správy paměti zabudované do většiny současných procesorů, jsou schopné řídit přístupy jednotlivých stránek k paměti. Operační systémy jako Linux umožňují aplikacím tuto kontrolu v uživatelském prostoru; jedná se o bity ochrany, které jsou k dispozici, např. mmap() či mprotect(). Ty umožňují procesům určit, zda má být konkrétní stránka dostupná pro čtení, zápis či spuštění. Tato úroveň zabezpečení sloužila dlouho, takže by se někdo mohl domnívat, že poskytuje vše, co aplikace potřebuje. Jenomže nová hardwarová funkce, vyvíjená pod hlavičkou společnosti Intel, naznačuje něco jiného. První kolo záplat podporujících novou funkci ukazuje jak k ní mohou programy získat přístup.
Funkce se jmenuje "Klíče na ochranu paměti" (MPK - Memory Protection Keys) a bude dostupná pouze pro 64bitové procesory Intel. Povolením této funkce bude možné přidělit (dříve nevyužitým) čtyřem bitům ve všech záznamech tabulky stránek jednu z šestnácti "klíčových" hodnot každé jednotlivé stránce. Nový je také 32bitový procesorový registr se dvěma bity pro každou klíčovou hodnotu. Nastavením bitu "write disable" pro daný klíč dojde z zablokování všech pokusů o zápis do stránek s touto klíčovou hodnotou. Nastavením "access disable" dojde i k zablokování čtení. Funkce MPK tedy umožňuje procesům rozdělit svou paměť nejvýše do 16 oblastí a selektivně povolit nebo zakázat přístup ke kterékoli z nich. Kontrolní registr je samostatný pro každé vlákno, takže je možné nezávisle povolovat či zakazovat libovolnou oblast.
Sadu patchů, které funkci MPK povolují, zveřejnil již dříve pro revizi Dave Hansen. I když jak poznamenal, prozatím nebude moci nikdo kromě lidí z Intelu kód spustit. Dave doufá, že jakmile bude daný hardware k dispozici, získá alespoň komentáře k (minimálním) API změnám v uživatelském prostoru pro podporu MPK.
V navrhovaném designu mohou aplikace nastavit klíče za pomocí některého ze systémových volání, které nastavují další zabezpečení stránek, např. mprotect(). Pro reprezentaci klíčových bitů byly definovány čtyři nové příznaky (flags) (PROT_PKEY0 až PROT_PKEY3). V jádře jsou tyto bity uloženy v oblasti virtuální paměti (VMA), a "pushnuty" do příslušných umístění v hardwarové tabulce stránek. Jestliže se ke stránce pokusí proces získat přístup způsobem, který není povolen ochrannými klíči, dostane obvyklý signál SIGSEGV. Zachytí-li tento signál, může vyhledat nový kód SEGV_PKUERR (v poli si_code struktury siginfo_t předané obsluze), pro detekci chyby způsobené ochranným klíčem. Momentálně nelze zjistit, který klíč chybu způsobil, ale tato část funkce je v seznamu věcí, které je třeba udělat.
Někdo by mohl namítat, proč je taková funkce zapotřebí, když toho co umí, lze docílit pomocí bitů ochrany paměti, které jsou již k dispozici. Problém se současnými bity je v tom, že je dost složité s nimi manipulovat. Každá změna vyžaduje zrušení platnosti Translation Lookaside Bufferu (TLB) v rámci celého systému, což je špatné samo o sobě, ale změna bezpečnosti jedné oblasti paměti může vyžadovat individuální změny v zápisech tabulek stránek pro tisíce (i více) stránek. Jakmile dojde k nastavení ochranných klíčů, může být daná oblast paměti povolena či zakázána jediným zápisem do registru. Velké zlepšení výkonu se tak projeví u všech aplikací, které vyžadují časté změny v oblastech adresního prostoru.
Otázkou (jak se ptal Ingo Molnar) zůstává, proč by měl proces tak často chtít měnit ochranu paměti. Důvodů pro vývoj této funkce je hned několik. Jedním je nakládání s citlivými šifrovanými daty. Šifrovací klíč by mohl využít síťový démon k zašifrování dat před jejich odesláním, zakazu přístupu k části paměti obsahující tento klíč (a textová data) a odeslání dat. V takovém případě nehrozí únik klíče ani dat. Tento způsob ochrany by mohl aplikace činit odolnější vůči útokům.
Dalším často zmiňovaným využitím je ochrana oblastní paměti před jejich poničením nechtěným "zbloudilým" přepisem. Databáze v paměti by mohla takovým zápisům zabránit a povolit je pouze v případě nutné změny. Tímto způsobem by se dalo po nějakou dobu předcházet poškození databáze v důsledku chyby. Ingo byl o tomto využití přesvědčený a navrhoval 64bitový adresní prostor, který by měl být dost velký pro ukrytí dat a jejich ochranu před poškozením. Také navrhl, že by verze mprotect(), která původně přeskočila TLB zneplatnění, mohla řešit problémy s výkonem, hlavně v případech využití velkých stránek. Na to reagoval Alan Cox tvrzením, že je velká poptávka po možnosti měnit GB paměti najednou, a na to, že je mprotect() příliš pomalý.
Mít možnost vypnout nečekané zápisy by mohla být velmi užitečná v situacích, kdy je základní (underlying) pamětí zařízení s trvalou pamětí; jakékoli chybné zápisy půjdou okamžitě do trvalé paměti. Využití pro MPK by našel také nástroj Valgrind.
K přidání hardwarové funkce MPK dochází z důvodu zájmu zákazníků bez ohledu na Molnarovy obavy. Bylo by tedy divné, kdyby ji kernel v budoucnu nepodporoval zvlášť proto, že její zavedení není nikterak invazivní. Otázkou tedy zůstává, zda je navrhovaný API pro uživatelský prostor správný, a udržitelný v dlouhodobém horizontu. Doufejme, že se na patch podívají ti vývojáři, kteří by funkci mohli využít, a že se v případě nějakých problémů ozvou.
K přidání hardwarové funkce MPK dochází z důvodu zájmu zákazníků bez ohledu na Molnarovy obavy. Bylo by tedy divné, kdyby ji kernel v budoucnu nepodporoval zvlášť proto, že její zavedení není nikterak invazivní.
Čistě pragmaticky: když pro to nebude standardní rozhraní v mainline, nepochybně rychle přispěchají nechvalně proslulé firmy se svými closed source moduly. A to mi rozhodně nepřipadá jako lepší alternativa.
Otázkou tedy zůstává, zda je navrhovaný uživatelský prostor API správný…
Znovu a znovu: když se v angličtině vyskytnou dvě podstatná jména za sebou, většinou to znamená, že první se stává přívlastkem rozvíjejícím to druhé. Takže "user-space API" není "uživatelský prostor API" ale "API pro uživatelský prostor".
Vlákno bylo přesunuto do samostatné diskuse.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.