Në kernelin Linux 5.12, i cili është nën zhvillim, është përfshirë një realizim i mekanizmit KFence (Kernel Electric Fence), i cili kontrollon përdorimin e memories, duke kapur daljet përtej kufijve të tamponëve, qasjet në memorien pas çlirimit dhe gabime të tjera të ngjashme.
Kjo funksionalitet ka ekzistuar tashmĂ« nĂ« kernel si njĂ« opsion ndĂ«rtimi KASAN (kernel address sanitizer, pĂ«rdor Address Sanitizer nĂ« gcc dhe clang tĂ« sotĂ«m) â megjithatĂ«, ajo Ă«shtĂ« pozicionuar kryesisht pĂ«r pĂ«rdorim nĂ« debug. NĂ«n-sistemi KFence dallon nga KASAN me shpejtĂ«sinĂ« e tij tĂ« lartĂ«, duke lejuar qĂ« kjo mundĂ«si tĂ« pĂ«rdoret edhe nĂ« kernelat e sistemeve operative.
Përdorimi në sisteme operative do të mundësojë zbulimin e gabimeve në përdorimin e memories, të cilat nuk shfaqen në testimet e para dhe dalin vetëm në ngarkesa operative ose gjatë punës së gjatë (në uptime të lartë). Për më tepër, përdorimi i KFence në sisteme operative do të mundësojë një rritje të konsiderueshme të numrit të makinave të përfshira në verifikimin e punës së kernelit me memorien.
Shpenzimet minimale, tĂ« pavarura nga ngarkesa, arrihen nĂ« KFence pĂ«rmes zĂ«vendĂ«simit tĂ« faqeve mbrojtĂ«se (guard pages) nĂ« heap pĂ«rmes intervaleve fikse. Pas pĂ«rfundimit tĂ« intervalit tĂ« mbrojtjes, KFence, pĂ«rmes sistemit tĂ« zakonshĂ«m tĂ« ndarjes sĂ« memories (SLAB ose SLUB allocator), shton njĂ« faqe mbrojtĂ«se nga pool-i i objekteve KFence dhe niset njĂ« numĂ«rim tĂ« ri tĂ« kohĂ«s. Ădo objekt KFence vendoset nĂ« njĂ« faqe tĂ« veçantĂ« memories, ndĂ«rsa faqet e memories nĂ« kufijtĂ« e majtĂ« dhe tĂ« djathtĂ« formojnĂ« faqet mbrojtĂ«se, tĂ« cilat kanĂ« njĂ« madhĂ«si qĂ« zgjidhet nĂ« mĂ«nyrĂ« tĂ« rastĂ«sishme.
Kështu, faqet me objekte ndahen nga njëra-tjetra me faqe mbrojtëse, të cilat janë të konfiguruara për të gjeneruar "page fault" për çdo qasje. Për të zbuluar operacionet e shkruarjes përtej kufijve të tamponëve brenda faqeve me objekte, përdoren gjithashtu "zonat e kuqe" të bazuara në modele, të cilat përdorin memorien që nuk po përdoret nga objektet, duke mbetur nga zgjatja e madhësisë së faqeve të memories.
Në rastin e përpjekjes për të aksesuar një zonë jashtë kufijve të bufferit, operacioni prek faqen e mbrojtjes, gjë që çon në gjenerimin e "page fault", i cili kapet nga KFence dhe regjistron të dhënat mbi problemin e zbuluar. Si parazgjedhje, KFence nuk bllokon gabimin, dhe thjesht regjistron një paralajmërim në log, por ekziston një konfigurim "panic_on_warn" që lejon, në rastin e një gabimi të zbuluar, të çojë kernelin në një gjendje dështimi (panic).
Burimi: opennet.ru
