Jadro Linuxu 5.12 prijalo subsystém KFence na detekciu chýb pri práci s pamäťou

Linuxové jadro 5.12, ktoré je vo vývoji, obsahuje implementáciu mechanizmu KFence (Kernel Electric Fence), ktorý kontroluje prácu s pamäťou, zachytáva pretečenie vyrovnávacej pamäte, prístupy do pamäte po uvoľnení a iné chyby podobnej triedy.

Podobná funkcionalita už bola prítomná v jadre vo forme možnosti zostavenia KASAN (sanitizer adresy jadra, používa Address Sanitizer v modernom gcc a clang) - bola však umiestnená hlavne na ladenie. Subsystém KFence sa od KASAN odlišuje vysokou prevádzkovou rýchlosťou, ktorá umožňuje využiť túto vlastnosť aj na jadrách fungujúcich systémov.

Aplikácia na produkčných systémoch umožní zachytiť chyby pamäte, ktoré sa neobjavujú v testovacích prevádzkach a objavujú sa len pri záťaži alebo pri dlhodobej prevádzke (s veľkou dobou prevádzky). Okrem toho použitie KFence na produkčných systémoch umožní výrazne zvýšiť počet strojov zapojených do kontroly prevádzky jadra s pamäťou.

KFence dosahuje minimálnu réžiu nezávislú od zaťaženia vkladaním ochranných strán do haldy v pevných intervaloch. Po uplynutí nasledujúceho ochranného intervalu KFence prostredníctvom štandardného systému prideľovania pamäte (SLAB alebo SLUB alokátor) pridá ďalšiu ochrannú stránku z fondu objektov KFence a spustí novú správu počítadla času. Každý objekt KFence sa nachádza na samostatnej pamäťovej stránke a pamäťové stránky pozdĺž ľavého a pravého okraja tvoria ochranné stránky, ktorých veľkosť sa volí náhodne.

Stránky s objektmi sú teda od seba oddelené ochrannými stránkami, ktoré sú nakonfigurované tak, aby pri akomkoľvek prístupe generovali „chybu stránky“. Na detekciu zápisov mimo hranice vnútri stránok objektov sa dodatočne používajú „červené zóny“ založené na vzoroch, ktoré zaberajú pamäť nevyužívanú objektmi a zostávajúcu, keď je veľkosť stránok pamäte zarovnaná. —+————+————+————+————+————+— | 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 | —+————+————+————+————+————+—

Ak dôjde k pokusu o prístup do oblasti mimo hraníc vyrovnávacej pamäte, operácia ovplyvní ochrannú stránku, čo vedie k vygenerovaniu „chyby stránky“, ktorá zachytí KFence a zaznamená informácie o identifikovanom probléme. V predvolenom nastavení KFence neblokuje chybu a zobrazuje iba varovanie v protokole, ale existuje nastavenie „panic_on_warn“, ktoré vám umožňuje uviesť jadro do stavu paniky, ak sa zistí chyba.

Zdroj: opennet.ru

Pridať komentár