Arenduses oleva Linuxi kerneli 5.12 koosseisu on lisatud KFenceâi (Kernel Electric Fence) mehhanismi teostus, mis kontrollib mĂ€lukasutust, tuvastades puhvri piiridest vĂ€ljumise, juba vabastatud mĂ€lule pöördumise ja muud sama klassi vead.
Sarnane funktsionaalsus oli kernelis juba olemas KASANi (kernel address sanitizer, kasutab tĂ€napĂ€evastes gcc ja clang kompilaatorites Address Sanitizerit) koostevalikuna, kuid see oli mĂ”eldud peamiselt silumiseks. KFence erineb KASANist suure jĂ”udluse poolest, mis vĂ”imaldab seda kasutada ka töökoormusega sĂŒsteemide kernelites.
Kasutamine töösĂŒsteemides vĂ”imaldab tuvastada mĂ€lukasutuse vigu, mis ei avaldu testkĂ€ivitustes ja ilmnevad alles reaalse töökoormuse all vĂ”i pika tööaja korral (suure uptimeâi puhul). Lisaks vĂ”imaldab KFenceâi kasutamine töösĂŒsteemides mĂ€rkimisvÀÀrselt suurendada nende masinate arvu, mis on kaasatud kerneli mĂ€lutöö kontrollimisse.
KFence saavutab minimaalse koormusest sĂ”ltumatu lisakulu tĂ€nu sellele, et hunnikusse lisatakse kindlate ajavahemike jĂ€rel kaitselehed (guard pages). Kui jĂ€rgmine kaitseintervall lĂ”peb, lisab KFence tavapĂ€rase mĂ€lueraldussĂŒsteemi (SLAB vĂ”i SLUB allocator) kaudu KFenceâi objektide puulist jĂ€rgmise kaitselehe ja alustab uue ajaloenduri arvestust. Iga KFenceâi objekt paigutatakse eraldi mĂ€lulehele ning vasakul ja paremal piiril asuvad mĂ€lulehed toimivad kaitselehtedena (guard pages), mille suurus valitakse juhuslikult.
Seega on objektidega lehed ĂŒksteisest eraldatud kaitselehtedega, mis on seadistatud tekitama mis tahes pöördumise korral âpage faultâiâ. Puhvri piiridest vĂ€ljapoole tehtavate kirjutusoperatsioonide tuvastamiseks kasutatakse objektilehtede sees tĂ€iendavalt mustripĂ”hiseid âpunaseid tsooneâ, mis hĂ”ivavad mĂ€lu, mida objektid ei kasuta ja mis jÀÀb alles mĂ€lulehtede suuruse joondamisel. â+ââââ+ââââ+ââââ+ââââ+ââââ+â | 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 pĂŒĂŒtakse pöörduda puhvri piiridest vĂ€ljapoole jÀÀvasse alasse, tabab operatsioon kaitselehte, mille tulemusel tekib page fault. Selle pĂŒĂŒab kinni KFence ja kirjutab logisse avastatud probleemi andmed. Vaikimisi KFence viga ei peata ja vĂ€ljastab vaid hoiatuse logisse, kuid olemas on seadistus «panic_on_warn», mis vĂ”imaldab vea tuvastamisel viia tuuma paanikaolekusse (panic).
Allikas: opennet.ru
