Arenduses oleva Linuxi 5.12 sĂŒdamiku koosseisu on integreeritud KFence (Kernel Electric Fence) mehhanismi teostus, mis kontrollib mĂ€lu kasutust, tuvastades puhverpiiride ĂŒletamisi, mĂ€lu juurde pÀÀsemist pĂ€rast vabanemist ning muid sarnase klassi vigu.
Sarnane funktsionaalsus oli juba olemas sĂŒdamikus KASAN (kernel address sanitizer, mis kasutab Address Sanitizeri kaasaegsetes gcc ja clang) koostamisvalikuna â kuid seda positsioneeriti peamiselt silumise rakendamiseks. KFence alamsĂŒsteem erineb KASAN-ist suure töökiirusena, mis vĂ”imaldab seda kasutada isegi töösĂŒsteemides.
TöösĂŒsteemides rakendamine annab vĂ”imaluse tuvastada mĂ€lu töövead, mis ei ilmne testkĂ€ivitustes ja tulevad esile vaid töökoormuste ajal vĂ”i pikaajalise töö (suure ĂŒleminekuaja) korral. Lisaks vĂ”imaldab KFence'i rakendamine töösĂŒsteemides oluliselt suurendada masinate arvu, mis on kaasatud sĂŒdamiku mĂ€lu töö kontrollimisse.
KFence saavutab minimaalset koormusest sĂ”ltumatut ĂŒlekande kulu, kasutades kaitse lehti (guard pages) mĂ€luhalduse mÀÀratud intervallide jĂ€rgi. PĂ€rast kaitse intervalli lĂ”ppemist lisab KFence oma tavapĂ€rase mĂ€luhaldussĂŒsteemi (SLAB vĂ”i SLUB allocator) kaudu jĂ€rgmise kaitse lehe KFence objektide basest ja alustab uut ajaloos jĂ€rgneva ajakonto. Iga KFence objekt paigutatakse eraldi mĂ€helehe peale ning mĂ€helehed vasak- ja parempoolses ÀÀres moodustavad kaitse lehed, mille suurust valitakse juhuslikult.
Seega eraldatakse objektide lehtedest kaitselehed, mis on seadistatud genereerima âpage faultâ igasuguste pĂ€ringute korral. Ăksikasjalike kirjutamisoperatsioonide tuvastamiseks objekti lehtede piire ĂŒletavate redigeerimiste jaoks kasutatakse nii nimetatud punaseid tsoone, mis pĂ”hinevad mallidel ja hĂ”ivavad mĂ€lu, mis ei ole objektide poolt kasutuses ning jÀÀb lehe suuruse ĂŒhtlustamisel. â+ââââ+ââââ+ââââ+ââââ+ââââ+â | 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 | â+ââââ+ââââ+ââââ+ââââ+ââââ+â
Kui proovite pöörduda mĂ€lu piirest vĂ€lja, mĂ”jutab operatsioon kaitselehte, mis toob kaasa âpage faultâ genereerimise, mille KFence tabab ja logib tuvastatud probleemi andmed. Vaikimisi KFence ei blokeeri viga ja vaid annab logisse hoiatuse, kuid on ette nĂ€htud seade âpanic_on_warnâ, mis vĂ”imaldab vigade tuvastamise korral viia tuuma kriitilisse seisu (panic).
Allikas: opennet.ru
