Portál AbcLinuxu, 18. dubna 2024 19:43

Jaderné noviny – 17. 9. 2014: Sanitizér adres jádra

14. 10. 2014 | Tadeáš Pelech
Články - Jaderné noviny – 17. 9. 2014: Sanitizér adres jádra  

Aktuální verze vývojového jádra: 3.17-rc5. Citáty týdne. Stav ZFS v Linuxu. ACPI, jádra a kontrakty s firmwarem. Sanitizér adres jádra.

Obsah

Aktuální verze vývojového jádra: 3.17-rc5

link

Vývojové jádro 3.17-rc5 vyšlo 14. září (oznámení). Linus k tomu řekl:

Mohl jsem vydání ze sentimentálních důvodů posunout na středu – bude to 23 let ode dne, kdy jsem nahrál zdrojový strom 0.01. Nejsem ale nijak zvlášť sentimentální, a tak jsem se na to vykašlal. Držím se klasického nedělního vydávání.

Linus upozornil, že jde o docela velkou sadu změn, proto můžeme zapomenout na brzké vydání finální verze 3.17 (aby nedošlo ke konfliktům mezi začleňovacím oknem a jeho cestovními plány).

Stabilní aktualizace: 17. září byly vydány verze 3.16.3 (oznámení), 3.14.19 (oznámení) a 3.10.55 (oznámení).

Citáty týdne

link

Je docela zbytečné aktualizovat jádro v kapesním ohřívači, pokud se tím tedy nechcete vytahovat.

Thomas Gleixner (odkaz)

Cílem jádra není odolnost proti neschopnosti vývojářů – tuhle bitvu nemůžete vyhrát, dokud nevyměníte vývojáře ovladačů za softwarové systémy.

Alan Cox (odkaz)

Může pomoct, když budete přemýšlet, jaké tipy byste mohli dát agentovi NSA, který se chce zapojit do open source projektu kleptografického trojského koně. Jak byste to udělali? Schovat změnu do záplaty o tisíci řádcích? Něco jiného? Pak udělejte přesný opak.

Ted Ts'o (odkaz)

Yao: Stav ZFS v Linuxu

link

Richard Yao se na blogu ClusterHQ dívá na aktuální stav projektu ZFSOnLinux (ZoL). Tvrdí, že ZoL je připravený k použití v produkčním prostředí z řady různých důvodů. Na jejich základě se dá soudit, že portování systému souborů ZFS do Linuxu dosáhlo stejné úrovně integrity dat, stability při běhu a funkcí, jako na ostatních platformách, kde se ZFS používá. „Díky sdílení společné základny kódu s ostatními platformami Open ZFS umožnilo ZFS v Linuxu rychle zavádět funkce dostupné na jiných platformách. V současnosti je pro komunitu Open ZFS referenční platformou Illumos a přestože ovladač ZFS obsahuje stovky funkcí, ZoL nemá dosud implementováno jen asi 18 z nich.“

Garrett: ACPI, jádra a kontrakty s firmwarem

link

Matthew Garrett píše o překážkách, které musejí zdolávat vývojáři pracující na systémech ARM založených na rozhraní ACPI. „Někdo by měl převzít odpovědnost za sledování chování ACPI a rozšiřovat toto exportované rozhraní při každé změně. A my musíme vědět, kdo to bude, předtím, než se kterýkoli z těchto systémů začne dodávat. Jinak nám hrozí záplava zařízení na platformě ARM, které podporují jen konkrétní verze jádra. A přesně tomu by mělo rozhraní ACPI předcházet.“

Sanitizér adres jádra

link

Sanitizér adres jádra (KASan) by měl nacházet místa, ve kterých jádro přistupuje k paměti, kde by nemělo. Používá kombinaci nové funkce GCC pro řízení přístupu k paměti a „stínové paměti“ ke sledování, které adresy jsou oprávněné, aby si mohl hlasitě stěžovat, pokud jádro čte nebo zapisuje někde jinde. KASan sdílí některé atributy ostatních funkcí ladění jádra, nabízí ale taky vlastní výhody. A už posloužil při dohledání skutečných chyb jádra.

Sada oprav KASan pochází od Andreje Rjabina, je ale založena na práci Andreje Konovalova a projektu AddressSanitizer. I když jsou tyto opravy zatím ve fázi RFC, jedná se už o jejich druhou verzi. Od zveřejnění původního RFC v červenci byla provedena řada vylepšení.

Základní myšlenkou KASanu je alokovat mapu („stínovou oblast“), kde každý jeden bajt v mapě představuje osm bajtů adresního prostoru jádra. Pro architekturu x86_64 (což je jediná podporovaná architektura) to znamená rezervaci (nikoli alokaci) 16 TB adresního prostoru pro správu celých 128 TB, které může jádro adresovat. Každý bajt v mapě kóduje oprávněnost jádra k přístupu k odpovídajícím bajtům v plném adresním prostoru.

Toto kódování je celkem jednoduché. 0 znamená oprávněný přístup všech osmi bajtů, zatímco 1–7 označují počet souvislých bajtů na začátku osmibajtové oblasti, které jsou platné (2 tedy znamená, že první 2 bajty jsou oprávněné a dalších 6 nikoli). Záporné hodnoty jsou určeny různým typům nepřístupné paměti (volná paměť, různé druhy červených zón apod.). Mohlo by se zdát, že by se další kladné hodnoty daly použít k zakódování souvislých oprávněných bajtů na konci osmibajtové oblasti, k tomu ale asi v praxi nedochází.

Přístupy jádra do paměti potom lze porovnávat se stínovou mapou a kontrolovat, jestli jsou oprávněné. GCC 5.0 (další hlavní verze po 4.9, která by měla být vydána v roce 2015) zavede novou funkci, která umožní kontrolu adres jádra za běhu. Příznak -fsanitize=kernel-address způsobí, že GCC bude řídit každou operaci načtení do paměti a uložení z ní. Do každé z těchto operací vloží volání funkce, která může prozkoumat cílovou adresu a pokud je neplatná, nahlásit to do protokolu jádra. Volání jsou ve tvaru __asan_loadN() a __asan_storeN(), kde N odpovídá rozsahu přístupu (1, 2, 4, 8 nebo 16 bajtů). K dispozici jsou opravy GCC, které tyto nelineární kontroly změní na integrované, kdy GCC přímo vloží kód pro kontrolu stínové mapy, místo aby volal zvláštní funkce.

Většinu práce tedy provádí kód vložený překladačem. Tyto opravy ale musejí zvládat ještě určité detaily. Implementace kontrolní a informační infrastruktury je první krok (tato oprava také začleňuje soubor Documentation/kasan.txt). Poté je třeba zaplnit úvodní stínovou oblast. Na počátku procesu spouštění je každá položka tabulky stránky ve stínové oblasti nastavena na nulovou stránku. Později, po namapování fyzické paměti, jsou nulové stránky odpovídající dané paměti uvolněny a jsou alokovány a namapovány skutečné stránky pro sledování paměti jádra.

Když jádro alokuje stránky, jsou ve stínové oblasti označeny jako přístupné; obdobně jsou stránky při uvolnění označené jako nepřístupné. Alokátor SLUB byl upraven tak, aby aktualizoval všechny alokace a uvolnění ve stínové mapě.

Rjabinin v první zprávě sady oprav nastínil rozdíly mezi KASanem a několika dalšími nástroji na ladění paměti jádra. Protože KASan používá ovládání vložení při kompilaci, je mnohem rychlejší než kmemcheck, nedokáže ale rozpoznat čtení neinicializované paměti jako kmemcheck. I když DEBUG_PAGEALLOC a SLUB_DEBUG jsou rychlejší než KASan, ani jeden nedokáže rozpoznat všechny neoprávněné přístupy jako KASan (DEBUG_PAGEALLOC nabízí granularitu jen na úrovni stránek a SLUB_DEBUG nedokáže rozpoznat některá nesprávná čtení).

KASan pro jádro aktivuje parametr Kconfig KASAN. Vyžaduje alokátor SLUB a GCC verze >= 5.0. Lepšího hlášení lze dosáhnout, pokud jsou aktivní trasování zásobníků a SLUB_DEBUG. Rjabinin také přidal testovací modul, který lze také použít k vyvolání přístupu mimo povolené oblasti a chyby použití po uvolnění k testování KASanu a dalších debuggerů paměti.

Diskuze o těchto opravách byly konstruktivní, jen několik návrhů se týká celkem drobných změn. Navíc Saša Levin uvedl několik chyb jádra, které objevil při použití fuzzeru Trinity s první verzí sady oprav KASan. Zdá se, že v ladění paměti existuje volný prostor, který by KASan mohl pomoct zaplnit.

Odkazy a zdroje

Kernel coverage at LWN.net: September 17, 2014

Další články z této rubriky

Jaderné noviny – přehled za březen 2024
Jaderné noviny – přehled za únor 2024
Jaderné noviny – přehled za leden 2024
Jaderné noviny – přehled za prosinec 2023
Jaderné noviny – přehled za listopad 2023

Diskuse k tomuto článku

14.10.2014 10:58 Roger
Rozbalit Rozbalit vše Re: Jaderné noviny – 17. 9. 2014: Sanitizér adres jádra
Odpovědět | Sbalit | Link | Blokovat | Admin
Odkaz na zdroj není, řekl bych, správný.
Tadeáš Pelech avatar 14.10.2014 11:29 Tadeáš Pelech | skóre: 34 | Malenice
Rozbalit Rozbalit vše Re: Jaderné noviny – 17. 9. 2014: Sanitizér adres jádra
Díky za upozornění, opraveno.
14.10.2014 11:19 Agáta
Rozbalit Rozbalit vše Re: Jaderné noviny – 17. 9. 2014: Sanitizér adres jádra
Odpovědět | Sbalit | Link | Blokovat | Admin
Struktura zdroje a kleptografický kůň? Chtělo by to trochu sanitizérovat :-)
14.10.2014 15:36 Jindřich Makovička | skóre: 17
Rozbalit Rozbalit vše Re: Jaderné noviny – 17. 9. 2014: Sanitizér adres jádra
Ovládání vložení při kompilaci také oblibuji :-)
14.10.2014 19:35 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Jaderné noviny – 17. 9. 2014: Sanitizér adres jádra
No právě, jaká kompilace? :-&x29;
pavlix avatar 16.10.2014 00:48 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Jaderné noviny – 17. 9. 2014: Sanitizér adres jádra
+1
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
17.10.2014 05:34 Jiří J. | skóre: 34 | blog: Poutník | Brno
Rozbalit Rozbalit vše Re: Jaderné noviny – 17. 9. 2014: Sanitizér adres jádra
Odpovědět | Sbalit | Link | Blokovat | Admin

kmemecheck? .. To je nějaká kontrola jaderných "meme"? :-D

20.10.2014 13:06 Petr Ježek | skóre: 10
Rozbalit Rozbalit vše Re: Jaderné noviny – 17. 9. 2014: Sanitizér adres jádra
Odpovědět | Sbalit | Link | Blokovat | Admin
ZFS v domácnostech netřeba, zbytečnosti. Jinde jde o to, čeho za jakou cenu se chce dosáhnout...
Archlinux for your comps, faster running guaranted!
pavlix avatar 20.10.2014 14:40 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Jaderné noviny – 17. 9. 2014: Sanitizér adres jádra
Proč v domácnostech, proč netřeba, a proč to vadí?
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
21.10.2014 19:43 maddoxik
Rozbalit Rozbalit vše Re: Jaderné noviny – 17. 9. 2014: Sanitizér adres jádra
Mam doma HP N40L a premyslel jsem o FreeNASu/NAS4Free a ZFS. Po zjisteni jak je ZFS "moc pametove rozezrane" se divam po necem jinem. Zatim mi v hledacku pristalo OpenMediaVault.

Nebo nekdo doporuci neco jineho pro konfiguraci 3x1TB (raid5) + 2x500GB single disky bez nutnosti redundance?
pavlix avatar 22.10.2014 14:37 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Jaderné noviny – 17. 9. 2014: Sanitizér adres jádra
Rozhodování mezi OpenMediaVault a ZFS mi přijde přinejmenším zvláštní.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
22.10.2014 19:06 maddoxik
Rozbalit Rozbalit vše Re: Jaderné noviny – 17. 9. 2014: Sanitizér adres jádra
Blbe to chapes, takze to trosu rozepisu: Rozhodovaljsem se zda pro domaci pouziti mam pouzit FreeNAS v kombinaci se ZFS a prislo mi to lehce overkill pro pametovou narocnost ZFS. Co jsem nekde vycetl, ZFS vyzaduje 4GB RAM + 1GB RAM pro kazdy 1TB diskoveho prostoru. V mem pripade RAIDZ se 3x1TB disky vychazi nejakych 6GB RAM. Ok, ať nežeru i kdyby to byla polovička tak i 3GB RAMky je to na muj vkus stale moc. Takze jsem opustil pro domaci pouziti ZFS a porozhlidnul se jinde a našel jsem na debianu postaveny OpenMediaVault s "blbym" RAID5. Tolik asi k ZFS a domacimu pouziti...

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.