Linuxi 5.12 kernel on võtnud kasutusele KFence'i alamsüsteemi, et tuvastada mäluga töötamisel vigu

Arendusjärgus olev Linuxi kernel 5.12 sisaldab KFence'i (Kernel Electric Fence) mehhanismi juurutamist, mis kontrollib mälukäsitlust, puhvri ülekoormuse püüdmist, mälule juurdepääsu pärast vabastamist ja muid sarnase klassi vigu.

Sarnased funktsioonid olid kernelis juba olemas KASAN-i ehitusvaliku näol (kerneli aadresside puhastaja, kasutab tänapäevastes gcc-s ja clangis Address Sanitizerit) - see oli siiski paigutatud peamiselt silumiseks. KFence'i alamsüsteem erineb KASANist oma suure töökiiruse poolest, mis võimaldab seda funktsiooni kasutada ka töösüsteemide tuumadel.

Tootmissüsteemides rakendamine võimaldab tuvastada mälutõrkeid, mis ei ilmne testkäibes ja ilmnevad ainult töökoormuse või pikaajalise töö ajal (suure tööajaga). Lisaks võimaldab KFence'i kasutamine tootmissüsteemides oluliselt suurendada nende masinate arvu, mis on seotud mäluga tuuma töö kontrollimisega.

KFence saavutab minimaalse koormusest sõltumatu üldkulud, sisestades kindlate intervallidega hunnikusse kaitselehti. Pärast järgmise kaitseintervalli möödumist lisab KFence standardse mälujaotussüsteemi (SLAB või SLUB jaotaja) kaudu järgmise kaitselehe KFence'i objektide kogumist ja käivitab uue ajaloenduri raporti. Iga KFence'i objekt asub eraldi mälulehel ning vasak- ja parempoolsel äärisel olevad mälulehed moodustavad valvelehed, mille suurus valitakse juhuslikult.

Seega on objektidega lehed üksteisest eraldatud kaitselehtedega, mis on konfigureeritud tekitama igal juurdepääsul lehetõrkeid. Objekti lehtede sees asuvate piiriüleste kirjutamiste tuvastamiseks kasutatakse lisaks mustripõhiseid "punaseid tsoone", mis hõivavad objektide poolt kasutamata mälu, mis jääb alles, kui mälulehtede suurus on joondatud. —+————+————+————+————+————+— | xxxxxxxxxx | O: | xxxxxxxxxx | :O | xxxxxxxxxx | | xxxxxxxxxx | B: | xxxxxxxxxx | :B | xxxxxxxxxx | | x VALVE x | J : PUNANE- | x VALVE x | PUNANE- : J | x VALVE x | | xxxxxxxxxx | E: TSOON | xxxxxxxxxx | TSOON: E | xxxxxxxxxx | | xxxxxxxxxx | C: | xxxxxxxxxx | :C | xxxxxxxxxx | | xxxxxxxxxx | T: | xxxxxxxxxx | : T | xxxxxxxxxx | —+————+————+————+————+————+—

Kui üritatakse pääseda puhvri piiridest väljapoole jäävale alale, mõjutab toiming kaitselehte, mis toob kaasa “lehe vea”, mis püüab kinni KFence’i ja logib tuvastatud probleemi kohta teavet. Vaikimisi KFence ei blokeeri tõrkeid ja kuvab logis ainult hoiatuse, kuid on olemas säte "panic_on_warn", mis võimaldab tõrke tuvastamisel kerneli paanikaseisundisse viia.

Allikas: opennet.ru

Lisa kommentaar