Im Linux-Kernel 5.12 wurde das KFence-Subsystem zur Erkennung von Fehlern im Umgang mit Speicher aufgenommen.

Der in Entwicklung befindliche Linux-Kernel 5.12 umfasst die Implementierung des KFence-Mechanismus (Kernel Electric Fence), der den Umgang mit Speicher ĂŒberwacht, indem er PufferĂŒberlĂ€ufe, Zugriffe auf bereits freigegebenen Speicher und andere Ă€hnliche Fehler aufspĂŒrt.

Eine derartige FunktionalitĂ€t war bereits in Form der KASAN-Build-Option (Kernel Address Sanitizer, nutzt Address Sanitizer in modernen gcc und clang) im Kernel vorhanden – sie war jedoch hauptsĂ€chlich fĂŒr Debugging-Zwecke gedacht. Das KFence-Subsystem unterscheidet sich von KASAN durch eine hohe Geschwindigkeit, die es ermöglicht, diese Funktion selbst auf Kerneln in produktiven Systemen zu nutzen.

Der Einsatz in produktiven Systemen wird es ermöglichen, Speicherfehler zu erkennen, die in TestlĂ€ufen nicht sichtbar werden und erst bei Arbeitslasten oder ĂŒber lĂ€ngere ZeitrĂ€ume (bei hoher VerfĂŒgbarkeit) auftauchen. Zudem ermöglicht der Einsatz von KFence in produktiven Systemen eine signifikante Erhöhung der Anzahl der Maschinen, die an der ÜberprĂŒfung des Speichermanagements des Kernels beteiligt sind.

Die minimalen, lastunabhĂ€ngigen Betriebskosten werden bei KFence durch das EinfĂŒgen von Schutzseiten (guard pages) in den Heap in festen Intervallen erreicht. Nach Ablauf einer Schutzintervallzeit fĂŒgt KFence ĂŒber den vorhandenen Speicherverteilungsmechanismus (SLAB oder SLUB-Allocator) eine neue Schutzseite aus dem KFence-Objektpool hinzu und startet einen neuen Zeitgeber. Jedes KFence-Objekt wird auf einer separaten Speicherseite platziert, und die Speicherseiten an der linken und rechten Grenze bilden die Schutzseiten (guard pages), deren GrĂ¶ĂŸe zufĂ€llig gewĂ€hlt wird.

Somit werden Seiten mit Objekten durch Schutzseiten getrennt, die so konfiguriert sind, dass sie einen „Seitenfehler“ bei jedem Zugriff erzeugen. Um Schreiboperationen außerhalb des Puffers innerhalb der Objektseiten zu identifizieren, werden zusĂ€tzlich „rote Zonen“ basierend auf Mustern verwendet, die Speicher belegen, der von Objekten nicht verwendet wird und beim Ausrichten der SeitenlĂ€ngen im Speicher verbleibt. —+————+————+————+————+————+— | xxxxxxxxx | O : | xxxxxxxxx | : O | xxxxxxxxx | | xxxxxxxxx | B : | xxxxxxxxx | : B | xxxxxxxxx | | x GUARD x | J : ROT- | x GUARD x | ROT- : J | x GUARD x | | xxxxxxxxx | E : ZONE | xxxxxxxxx | ZONE : E | xxxxxxxxx | | xxxxxxxxx | C : | xxxxxxxxx | : C | xxxxxxxxx | | xxxxxxxxx | T : | xxxxxxxxx | : T | xxxxxxxxx | —+————+————+————+————+————+—

Wenn Sie versuchen, auf einen Bereich außerhalb der Grenzen des Puffers zuzugreifen, betrifft die Operation die Schutzseite, was zu einem „Seitenfehler“ fĂŒhrt, der von KFence abgefangen wird und die erkannten Problemdaten in das Protokoll schreibt. StandardmĂ€ĂŸig blockiert KFence den Fehler nicht und gibt lediglich eine Warnung im Protokoll aus, es gibt jedoch eine Konfiguration „panic_on_warn“, die es ermöglicht, den Kernel im Falle eines Fehlers in einen Absturzstatus (panic) zu versetzen.

Quelle: opennet.ru

Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server đŸ”„ Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster