Do jádra Linuxu 5.12 byla přijata podsystém KFence pro odhalování chyb při práci s pamětí.

Součástí vyvíjeného jádra Linux 5.12 je implementace mechanismu KFence (Kernel Electric Fence), který kontroluje práci s pamětí, odhaluje přetečení bufferů, přístupy k paměti po uvolnění a další podobné chyby.

Podobná funkcionalita již byla v jádře přítomná jako možnost sestavení KASAN (kernel address sanitizer, využívá Address Sanitizer v moderních gcc a clang) — avšak byla primárně zaměřena na ladění. Podsystem KFence se od KASAN liší vysokou rychlostí, což umožňuje tuto funkci používat i na jádrech v produkčních systémech.

Použití v produkčních systémech umožní odhalování chyb v paměti, které se neprojevují v testovacích bězích a objevují se pouze při pracovních zátěžích nebo po delší době provozu (při velkém uptime). Navíc použití KFence v produkčních systémech výrazně zvýší počet strojů zapojených do kontroly práce jádra s pamětí.

Minimální režijní náklady, které nezávisí na zátěži, jsou v KFence dosaženy díky zavedení stránek ochrany (guard pages) do haldy v pevných intervalech. Po uplynutí doby chránícího intervalu KFence přes standardní systém přidělování paměti (SLAB nebo SLUB allocator) přidává další stránku ochrany z objektového fondu KFence a začíná nový odpočet časovače. Každý objekt KFence je umístěn na samostatné stránce paměti a stránky paměti na levé a pravé hranici tvoří stránky ochrany (guard pages), jejichž velikost se vybírá náhodně.

Takto jsou stránky s objekty odděleny stránkami ochrany, které jsou nastaveny tak, aby generovaly ‚page fault‘ při jakémkoli přístupu. Pro odhalení zápisových operací mimo hranice bufferu uvnitř stránek s objekty se navíc používají ‚červené zóny‘ na základě vzorů, které zabírají paměť nevyužívanou objekty, vyplývající z zarovnání velikosti stránek paměti. —+————+————+————+————+————+— | xxxxxxxxx | O : | xxxxxxxxx | : O | xxxxxxxxx | | xxxxxxxxx | B : | xxxxxxxxx | : B | xxxxxxxxx | | x GUARD x | J : RED- | x GUARD x | RED- : J | x GUARD x | | xxxxxxxxx | E : ZONE | xxxxxxxxx | ZONE : E | xxxxxxxxx | | xxxxxxxxx | C : | xxxxxxxxx | : C | xxxxxxxxx | | xxxxxxxxx | T : | xxxxxxxxx | : T | xxxxxxxxx | —+————+————+————+————+————+—

Pokud dojde k pokusu o přístup do oblasti mimo hranice vyrovnávací paměti, operace zasáhne ochrannou stránku, což vyvolá „page fault“, který zachytí KFence a zapíše data o zjištěném problému do logu. Ve výchozím nastavení KFence chybu nezabíjí a pouze ji zaznamenává do logu, ale je k dispozici možnost nastavení „panic_on_warn“, která umožňuje přenést jádro do stavu havárie (panic) při zjištění chyby.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster