Die Linux 5.12-kern het die KFence-substelsel aangeneem om foute op te spoor wanneer met geheue gewerk word

Die Linux-kern 5.12, wat in ontwikkeling is, sluit 'n implementering van die KFence (Kernel Electric Fence) meganisme in, wat geheuehantering nagaan, bufferoorskryding vang, geheuetoegang na vrystelling en ander foute van 'n soortgelyke klas.

Soortgelyke funksionaliteit was reeds teenwoordig in die kern in die vorm van die KASAN-bou-opsie (kernadresreiniger, gebruik Address Sanitizer in moderne gcc en clang) - dit was egter hoofsaaklik geposisioneer vir ontfoutingsgebruik. Die KFence-substelsel verskil van KASAN in sy hoë bedryfspoed, wat dit moontlik maak om hierdie kenmerk selfs op kerns in werkende stelsels te gebruik.

Toepassing op produksiestelsels sal dit moontlik maak om geheuefoute op te vang wat nie in toetslopies voorkom nie en slegs tydens werkladings of tydens langtermynwerking (met 'n groot optyd) verskyn. Daarbenewens sal die gebruik van KFence op produksiestelsels dit moontlik maak om die aantal masjiene wat betrokke is by die nagaan van die werking van die kern met geheue aansienlik te verhoog.

KFence bereik minimale ladingonafhanklike bokoste deur wagbladsye met vaste tussenposes in die hoop in te voeg. Nadat die volgende beskermingsinterval verstryk het, voeg KFence, deur die standaard geheue toewysingstelsel (SLAB of SLUB toewyser), die volgende beskerming bladsy vanaf die KFence objekpoel by, en begin 'n nuwe tydtellerverslag. Elke KFence-voorwerp is in 'n aparte geheuebladsy geleë, en die geheuebladsye langs die linker- en regtergrense vorm wagbladsye, waarvan die grootte lukraak gekies word.

Bladsye met voorwerpe word dus van mekaar geskei deur beskermingsbladsye, wat gekonfigureer is om 'n "bladsyfout" op enige toegang te genereer. Om buite-grens skryfwerk binne voorwerpbladsye op te spoor, word patroongebaseerde "rooi sones" addisioneel gebruik, wat geheue opneem wat nie deur voorwerpe gebruik word nie, wat oorbly wanneer die grootte van geheuebladsye belyn is. —+————+————+————+————+————+— | xxxxxxxx | O: | xxxxxxxx | :O | xxxxxxxx | | xxxxxxxx | B: | xxxxxxxx | :B | xxxxxxxx | | x WAG x | J : ROOI- | x WAG x | ROOI- : J | x WAG x | | xxxxxxxx | E: SONE | xxxxxxxx | SONE: E | xxxxxxxx | | xxxxxxxx | C: | xxxxxxxx | :C | xxxxxxxx | | xxxxxxxx | T: | xxxxxxxx | : T | xxxxxxxx | —+————+————+————+————+————+—

As 'n poging aangewend word om toegang tot 'n area buite die buffergrense te verkry, beïnvloed die operasie die beskermingsbladsy, wat lei tot die generering van 'n "bladsyfout", wat KFence onderskep en inligting oor die geïdentifiseerde probleem aanteken. By verstek blokkeer KFence nie 'n fout nie en vertoon slegs 'n waarskuwing in die logboek, maar daar is 'n "panic_on_warn"-instelling wat jou toelaat om die kern in 'n paniektoestand te plaas as 'n fout opgespoor word.

Bron: opennet.ru

Voeg 'n opmerking