De Linux 5.12 Kernel huet de KFence Subsystem ugeholl fir Feeler z'entdecken wann Dir mat Erënnerung schafft

De Linux Kernel 5.12, deen an der Entwécklung ass, enthält eng Implementatioun vum KFence (Kernel Electric Fence) Mechanismus, deen d'Erënnerungshandhabung iwwerpréift, d'Puffer-Iwwerschwemmungen opfänkt, d'Erënnerungszougäng no der Befreiung an aner Feeler vun enger ähnlecher Klass.

Ähnlech Funktionalitéit war scho präsent am Kernel a Form vun der KASAN Build Optioun (Kernel Adress Sanitizer, benotzt Adress Sanitizer a modernen gcc a clang) - awer et war haaptsächlech fir Debugging Benotzung positionéiert. De KFence-Subsystem ënnerscheet sech vu KASAN a senger héijer Operatiounsgeschwindegkeet, wat et méiglech mécht dës Feature och op Kären an Aarbechtssystemer ze benotzen.

D'Applikatioun op Produktiounssystemer wäert et méiglech maachen Erënnerungsfehler ze fangen, déi net an Testlafen erschéngen an nëmmen während Aarbechtslaascht oder während laangfristeg Operatioun erschéngen (mat enger grousser Uptime). Zousätzlech wäert d'Benotzung vu KFence op Produktiounssystemer et méiglech maachen d'Zuel vun de Maschinnen wesentlech ze erhéijen, déi an der Iwwerpréiwung vun der Operatioun vum Kernel mat Erënnerung involvéiert sinn.

KFence erreecht minimal load-onofhängeg Overhead andeems Dir Schutzsäiten an de Koup mat fixen Intervalle setzt. Nodeems den nächste Schutzintervall ofgelaf ass, füügt KFence, duerch de Standard Memory Allocation System (SLAB oder SLUB Allocator), déi nächst Schutzsäit aus dem KFence Objektpool un, a fänkt en neien Zäitzählerbericht un. All KFence Objet läit an enger separater Erënnerung Säit, an der Erënnerung Säiten laanscht déi lénks a riets Grenze Form Gard Säiten, der Gréisst vun deem ass zoufälleg gewielt.

Sou sinn Säite mat Objete vuneneen duerch Schutzsäiten getrennt, déi konfiguréiert sinn fir e "Säitfehler" bei all Zougang ze generéieren. Ze entdecken ausserhalb Grenze schreift bannent Objet Säiten, Muster-baséiert "rout Zonen" ginn zousätzlech benotzt, déi Erënnerung besetzen net vun Objete benotzt, bleiwen wann d'Gréisst vun Erënnerung Säiten ausgeriicht ass. —+————+————+————+————+————+— | xxxxxxxx | O: | xxxxxxxx | :o | xxxxxxxx | | xxxxxxxx | B: | xxxxxxxx | :B | xxxxxxxx | | x GUARD x | J : ROUT- | x GUARD x | ROTT- : J | x GUARD x | | xxxxxxxx | E: ZONE | xxxxxxxx | ZONE: E | xxxxxxxx | | xxxxxxxx | C: | xxxxxxxx | :C | xxxxxxxx | | xxxxxxxx | T: | xxxxxxxx | :T | xxxxxxxx | —+————+————+————+————+————+—

Wann e Versuch gemaach gëtt fir Zougang zu engem Gebitt ausserhalb vun de Puffergrenzen ze kréien, beaflosst d'Operatioun d'Schutzsäit, wat zu der Generatioun vun engem "Säitfehler" féiert, deen KFence offënnt an d'Informatioun iwwer de identifizéierte Problem protokolléiert. Par défaut blockéiert KFence kee Feeler a weist nëmmen eng Warnung am Logbuch, awer et gëtt eng "panic_on_warn" Astellung déi Iech erlaabt de Kernel an e Panikzoustand ze setzen wann e Feeler festgestallt gëtt.

Source: opennet.ru

Setzt e Commentaire