Im Linux-Kernel 5.12 wurde das KFence-Subsystem zur Erkennung von Speicherfehlern akzeptiert

Im bevorstehenden Linux-Kernel 5.12 ist die Implementierung des KFence-Mechanismus (Kernel Electric Fence) enthalten, der die Arbeit mit dem Speicher ĂŒberprĂŒft, indem er ÜberlĂ€ufe von Puffern, Zugriffe auf den Speicher nach der Freigabe und andere Ă€hnliche Fehler erkennt.

Eine solche FunktionalitĂ€t war bereits im Kernel in Form der KASAN-Build-Option (Kernel Address Sanitizer, die Address Sanitizer in modernen GCC und Clang verwendet) vorhanden – sie wurde jedoch hauptsĂ€chlich fĂŒr Debugging-Zwecke positioniert. Das KFence-Subsystem unterscheidet sich von KASAN durch hohe Arbeitsgeschwindigkeit, was die Nutzung dieser Funktion selbst in Betriebssystem-Kernen ermöglicht.

Der Einsatz in produktiven Systemen ermöglicht es, Speicherfehler zu erkennen, die sich bei TestlĂ€ufen nicht manifestieren und erst unter Arbeitslast oder bei lĂ€ngeren Betriebszeiten (bei hohem Uptime) auftreten. DarĂŒber hinaus wird der Einsatz von KFence in produktiven Systemen es ermöglichen, die Anzahl der Maschinen zu erhöhen, die an der ÜberprĂŒfung der Speichernutzung des Kernels beteiligt sind.

Die minimalen overhead, die unabhĂ€ngig von der Last sind, werden im KFence erreicht, indem Schutzseiten (Guard Pages) in den Heap ĂŒber feste Intervalle eingefĂŒgt werden. Nach Ablauf des aktuellen Schutzzeitraums fĂŒgt KFence ĂŒber den Standard-Speicherallokator (SLAB oder SLUB) eine weitere Schutzseite aus dem KFence-Objektpool hinzu und beginnt einen neuen Zeitmesser. Jedes KFence-Objekt wird auf einer separaten Speicherseite abgelegt, und die Seiten an der linken und rechten Grenze bilden die Schutzseiten (Guard Pages), deren GrĂ¶ĂŸe zufĂ€llig festgelegt wird.

So werden die Seiten mit Objekten durch Schutzseiten voneinander getrennt, die so konfiguriert sind, dass sie bei jedem Zugriff einen „Page Fault“ erzeugen. Um Schreiboperationen außerhalb des Pufferbereichs innerhalb der Objekseiten zu erkennen, werden zusĂ€tzlich auf nicht verwendeten Speicherbereichen basierende „rote Zonen“ verwendet, die beim Ausrichten der Speicherseiten entstehen. —+————+————+————+————+————+— | 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 | —+————+————+————+————+————+—

Wenn versucht wird, auf Bereiche außerhalb der Grenzen des Puffers zuzugreifen, trifft die Operation auf die Schutzseite, was zur Erzeugung eines «Page Fault» fĂŒhrt, der von KFence abgefangen wird und die erkannten Probleme in das Protokoll schreibt. StandardmĂ€ĂŸig blockiert KFence den Fehler nicht und gibt lediglich eine Warnung im Protokoll aus, jedoch gibt es die Einstellung «panic_on_warn», die im Falle eines Fehlers den Kernel in einen Crash-Zustand (Panic) versetzt.

Quelle: opennet.ru

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster