Google objevil pomocí KCSAN stovky podmínek závodu v linuxovém jádře

Linux Kernel

Inženýři Google které přispívají k linuxovému jádru oznámili, že v jádře objevili stovky „závodních podmínek“ pomocí KCSAN. Společnost již dlouho pracuje na AddressSanitizer, aby našla chyby související s poškozením paměti nebo UndefinedBehaviorSanitizer pro nedefinované chování v kódu.

Tentokrát Google nabízí nový detektor „Závodních podmínek“ pro linuxové jádro s názvem KCSAN (Kernel Concurrency Sanitizer). Tyto kritické chyby zabezpečení nejsou nové. Ve skutečnosti Podmínky závodu nastanou, když dvě nebo více vláken ve stejném procesu přistupují ke stejnému umístění paměti současně, kde alespoň jeden z přístupů má psát, a když vlákna nepoužívají žádné exkluzivní zámky k řízení svého přístupu k této paměti.

Pokud jsou tyto podmínky splněny, není pořadí přístupu deterministické a výpočet může v závislosti na tomto pořadí poskytnout různé výsledky z jednoho běhu do druhého.

Podmínky závodu jsou stále častěji považovány za chyby souběžného přístupu a je obtížné je duplikovat a diagnostikovat v paralelních programech. Linuxové jádro je rozsáhlý softwarový systém, ve kterém jsou vlákny intenzivní paralelismus a nedeterministické prokládání vláken více předmětem konkurenčních podmínek.

Některé soutěžní situace mohou být neškodné, ale mnoho z nich dosud identifikovaných se považuje za chyby.

Linuxové jádro poskytuje několik mechanismů, jak se těmto typům podmínek vyhnout a spravovat je Protože existují nástroje, jako je Thread Analyzer nebo KTSAN (Kernel Thread Sanitizer), které detekují kritické chyby spuštění v jádře Linuxu.

Google, který také přispívá k linuxovému jádru, však nedávno navrhl KCSAN, nový detektor podmínek závodu pro jádro, podobný KTSAN.

Podle Google se KCSAN zaměřuje na objevování konkurenčních situací v kódu jádra. Tento dynamický detektor kritických zásahů je alternativou k produktu Kernel Thread Sanitizer (KTSAN).

Podle vysvětlení Google, KCSAN je založen na vzorkovacích monitorovacích bodech, na rozdíl od detektoru KTSAN, což je detektor kritické rasy před událostí. Klíčovými prioritami v designu KCSAN jsou nedostatek falešných pozitiv, škálovatelnost a jednoduchost.

KCSAN používá pro přístup do paměti kompilační nástroje. KCSAN je kompatibilní s kompilátory GCC a Clang. U GCC vyžaduje verzi 7.3.0 nebo novější a u Clang vyžaduje verzi 7.0.0 nebo novější.

Na stránce GitHub projektuMarco Elver z Googlu napsal, že při použití KCSAN v testech minulý měsíc našli za pouhé dva dny více než 300 jedinečných klíčových konkurenčních situací. KCSAN poskytuje několik možností konfigurace pro přizpůsobení svého chování.

"Používáme KCSAN prostřednictvím Syzkalleru několik týdnů a našli jsme spoustu chyb." Původně v září 2019 jsme za pouhé dva dny identifikovali více než 300 jedinečných soutěžních situací, “napsal.

Google uvedl, že obecný přístup je založen na DataCollider, další dynamický detektor konkurenčních situací v modulech jádra. Ale na rozdíl od DataCollider, KCSAN nepoužívá hardwarové monitorovací body, místo toho se spoléhá na kompilační nástroje.

Monitorovací body jsou implementovány pomocí efektivního kódování, které ukládá typ, velikost a přístupovou adresu do dlouhého souboru. Výhody použití flexibilních monitorovacích bodů jsou přenositelnost a větší flexibilita při omezování přístupu, který může monitorovací bod aktivovat.

Zde jsou některé z klíčových bodů, které společnost KCSAN učinila pro Google:

  • Vysoký výkon: Runtime KCSAN je minimální a nevyžaduje uzamčení sdíleného stavu pro každý přístup. Výsledkem je mnohem lepší výkon než u KTSAN.
  • Žádná další paměť: podle Googlu není nutná žádná mezipaměť. Aktuální implementace používá malý počet délek ke kódování informací o monitorovacím bodě, což je zanedbatelné
  • Příkaz paměti: KCSAN nezná pravidla kontroly linuxového paměťového modelu jádra (LKMM). To může vést ke ztrátě kritických ras (falešné negativy) ve srovnání s detektorem ras před událostí, jako je KTSAN
  • Přesnost: Podle Google je KCSAN nepřesný, protože používá strategii vzorkování;
  • Vyžaduje anotaci: mimo runtime KCSAN je vyžadována minimální anotace. V případě posluchače události předběžných podmínek vede jakékoli opomenutí k falešným poplachům, což je zvláště důležité v kontextu jádra, které zahrnuje vlastní časovací mechanismy.
  • Detekce dynamických zápisů ze zařízení: Kontrolou hodnot dat během nastavení sledovacího bodu lze také detekovat dynamické zápisy ze zařízení.

Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Za data odpovídá: AB Internet Networks 2008 SL
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.