De Linux 5.12-kernel hat it KFence-subsysteem oannaam om flaters te detektearjen by it wurkjen mei ûnthâld

De Linux kernel 5.12, dy't yn ûntwikkeling is, omfettet in ymplemintaasje fan it KFence (Kernel Electric Fence) meganisme, dy't kontrolearret ûnthâld ôfhanneling, fange buffer oerrinners, ûnthâld tagong nei befrijing, en oare flaters fan in ferlykbere klasse.

Soartgelikense funksjonaliteit wie al oanwêzich yn 'e kernel yn' e foarm fan 'e KASAN build-opsje (kerneladressanizer, brûkt Address Sanitizer yn moderne gcc en clang) - it waard lykwols benammen pleatst foar debuggen. KFence subsysteem ferskilt fan KASAN yn syn hege bestjoeringssysteem snelheid, dat makket it mooglik om te brûken dizze funksje sels op kearnen yn wurkjende systemen.

Applikaasje op produksje systemen sil meitsje it mooglik om te fangen ûnthâld flaters dy't net ferskine yn test rint en allinnich ferskine ûnder workloads of ûnder lange-termyn operaasje (mei in grutte uptime). Derneist sil it gebrûk fan KFence op produksjesystemen it mooglik meitsje om it oantal masines dy't belutsen binne by it kontrolearjen fan de wurking fan 'e kearn mei ûnthâld signifikant te ferheegjen.

KFence berikt minimale lading-ûnôfhinklike overhead troch it ynfoegjen fan wachtsiden yn 'e heap op fêste yntervallen. Neidat de folgjende beskerming ynterval is ferrûn, foeget KFence, fia it standert ûnthâld tawizing systeem (SLAB of SLUB allocator), de folgjende beskerming side út de KFence foarwerp pool, en begjint in nij tiid counter rapport. Elts KFence foarwerp leit yn in aparte ûnthâld side, en de ûnthâld siden lâns de lofter en rjochter grinzen foarmje wacht siden, de grutte fan dat wurdt willekeurich keazen.

Sa wurde siden mei objekten fan elkoar skieden troch beskermingssiden, dy't konfigureare binne om in "sidefout" te generearjen by elke tagong. Om skriuwoperaasjes bûten de grins te detektearjen binnen objektsiden, wurde ek patroanbasearre "reade sônes" brûkt, dy't ûnthâld ynnimme dat net brûkt wurdt troch objekten, oerbleaun as de grutte fan ûnthâldsiden ôfstimd is. —+————+————+————+————+————+— | xxxxxxxx | O: | xxxxxxxx | :O | xxxxxxxx | | xxxxxxxx | B: | xxxxxxxx | :B | xxxxxxxx | | x GUARD x | J : RED- | x GUARD x | RED- : J | x GUARD x | | xxxxxxxx | E: SONE | xxxxxxxx | SÊNE: E | xxxxxxxx | | xxxxxxxx | C: | xxxxxxxx | :C | xxxxxxxx | | xxxxxxxx | T: | xxxxxxxx | : T | xxxxxxxx | —+————+————+————+————+————+—

As der besocht wurdt om tagong te krijen ta in gebiet bûten de buffergrinzen, hat de operaasje ynfloed op de beskermingsside, wat liedt ta de generaasje fan in "sidefout", dy't KFence ûnderskept en ynformaasje oer it identifisearre probleem registrearret. Standert blokkeart KFence gjin flater en lit allinich in warskôging sjen yn it log, mar d'r is in "panic_on_warn" ynstelling wêrmei jo de kearn yn in panyk tastân kinne sette as in flater ûntdutsen wurdt.

Boarne: opennet.ru

Add a comment