Linuxové jádro 5.12 přijalo subsystém KFence pro detekci chyb při práci s pamětí

Linuxové jádro 5.12, které je ve vývoji, obsahuje implementaci mechanismu KFence (Kernel Electric Fence), který kontroluje práci s pamětí, zachycuje přetečení vyrovnávací paměti, přístupy do paměti po uvolnění a další chyby podobné třídy.

Podobná funkcionalita již byla v jádře přítomna v podobě možnosti sestavení KASAN (sanitizer kernel address, používá Address Sanitizer v moderním gcc a clang) - byla však umístěna hlavně pro ladění. Subsystém KFence se od KASANu liší vysokou provozní rychlostí, která umožňuje využít tuto funkci i na jádrech v pracovních systémech.

Aplikace na produkčních systémech umožní zachytit chyby paměti, které se neobjevují v testovacích provozech a objevují se pouze při zátěži nebo při dlouhodobém provozu (s velkou dobou provozu). Použití KFence na produkčních systémech navíc umožní výrazně zvýšit počet strojů zapojených do kontroly provozu jádra s pamětí.

KFence dosahuje minimální režie nezávislé na zatížení vkládáním ochranných stránek do hromady v pevných intervalech. Po uplynutí dalšího intervalu ochrany KFence prostřednictvím standardního systému alokace paměti (SLAB nebo SLUB alokátor) přidá další stránku ochrany z fondu objektů KFence a spustí novou zprávu počítadla času. Každý objekt KFence je umístěn na samostatné paměťové stránce a paměťové stránky podél levého a pravého okraje tvoří ochranné stránky, jejichž velikost je zvolena náhodně.

Stránky s objekty jsou tedy od sebe odděleny ochrannými stránkami, které jsou nakonfigurovány tak, aby při jakémkoli přístupu generovaly „chybu stránky“. K detekci zápisů mimo hranice uvnitř stránek objektů se navíc používají „červené zóny“ založené na vzorech, které zabírají paměť nevyužívanou objekty, která zbývá, když je velikost stránek paměti zarovnána. —+————+————+————+————+————+— | xxxxxxxxx | O: | xxxxxxxxx | :O | xxxxxxxxx | | xxxxxxxxx | B: | xxxxxxxxx | :B | xxxxxxxxx | | x STRÁŽKA x | J : ČERVENÁ- | x STRÁŽKA x | ČERVENÁ- : J | x STRÁŽKA x | | xxxxxxxxx | E: ZÓNA | xxxxxxxxx | ZÓNA: 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 ovlivní ochrannou stránku, což vede ke generování „chyby stránky“, která zachytí KFence a zaznamená informace o zjištěném problému. Ve výchozím nastavení KFence neblokuje chybu a zobrazuje pouze varování v protokolu, ale existuje nastavení „panic_on_warn“, které vám umožňuje uvést jádro do stavu paniky, pokud je zjištěna chyba.

Zdroj: opennet.ru

Přidat komentář