A Linux 5.12 kernelbe bekerült a KFence alrendszer a memóriahasználati hibák felderítésére.

A Linux 5.12 verziójába beépítették a KFence (Kernel Electric Fence) mechanizmus megvalósítását, amely a memória kezelését ellenőrzi, és kifogásolja a bufferszéli túllépéseket, a memóriacsökkentéseket követő hozzáféréseket és más hasonló hibákat.

Ilyen funkcionalitás már korábban is létezett a kernelben KASAN (kernel address sanitizer, modern gcc és clang használ) összetevőként, azonban főként hibakeresési célokra volt hivatott. A KFence alrendszer a KASAN-nal szemben magasabb sebességgel működik, lehetővé téve e funkció használatát akár éles rendszereken is.

Az éles rendszereken történő alkalmazás lehetővé teszi a memóriakezelési hibák észlelését, amelyek nem jelentkeznek tesztelés során, hanem csak a munkaterhelések vagy hosszabb működés (nagy uptime) alatt. Ezen kívül a KFence alkalmazása éles rendszereken jelentősen növelheti azoknak a gépeknek a számát, amelyek részt vesznek a kernel memóriakezelésének ellenőrzésében.

A minimális, terheléstől független költségeket a KFence a védelmi oldalak (guard pages) beillesztésével éri el a halomba, rögzített időközökben. A következő védelmi időszak leteltével a KFence a szokásos memóriakezelő rendszeren (SLAB vagy SLUB allocator) keresztül hozzáad egy új védőoldalt a KFence objektumok medencéjéből, és új időszámlálót indít. Minden KFence objektumot egy külön memóriaoldalon helyeznek el, és az oldalak bal és jobb szélei védőoldalakat (guard pages) alkotnak, amelyek mérete véletlenszerűen kerül meghatározásra.

Ezek szerint az objektumok közötti oldalak védőoldalaktól vannak elválasztva, amelyek a hozzáférés során generálnak "page fault"-ot. A buffer határán belüli írási műveletek észlelésére további "piros zónákat" használnak a minták alapján, amelyek a memória használaton kívüli részét foglalják el, és a memória oldalainak méretének igazításakor keletkeznek. —+————+————+————+————+————+— | 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 | —+————+————+————+————+————+—

Ha megpróbálják elérni a memóriaterület határain kívül, a művelet érinti a védelmi lapot, ami "page fault" generálódáshoz vezet, amelyet a KFence megfog, és naplózza a felismert problémát. Alapértelmezés szerint a KFence nem blokkolja a hibát, és csak figyelmeztetést ír ki a naplóba, de van egy "panic_on_warn" beállítás is, amely lehetővé teszi, hogy hiba esetén a rendszert leállítsa (panic) az operációs rendszer.

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster