Live Kernel Patching: Neues Interface für Kgraft und Kpatch

Den Kernel zu patchen, ohne das System neu starten zu müssen, ist ein langjähriges Ziel im Linux-Bereich. Nun stellt ein Patch ein Interface für verschiedene Ansätze zum Kernel Live Patching bereit.

Oracle hat mit Ksplice eine Software entwickelt, die Live-Kernel-Patching ermöglicht. Das erlaubt es, den Kernel oder Funktionen seiner Module im laufenden Betrieb ohne Neustart zu patchen. Das ist essenziell in Umgebungen, die es sich nicht leisten können oder wollen, Server neu zu starten. Da Oracle Ksplice allein an die eigenen Kunden lizenziert, haben Suse mit Kgraft und Red Hat mit Kpatch eigene Varianten nachgeliefert.

Entwickler Seth Jennings hat nun auf der Kernel-Mailingliste ein Patch eingereicht, der Kpatch und Kgraft zwar nicht vereint, ihnen aber eine gemeinsame Schnittstelle zum Kernel zur Verfügung stellt, die auf Ftrace basiert. Die Lösung ist ein Resultat aus Diskussionen auf der Live Patching Mini-Conference, die im Rahmen der Linux Plumber Conference stattfand.

Der Mechanismus besteht aus einem Core, der ein Interface für Patch-Module anbietet, über dass sich Patches beim Core registrieren lassen. Die Patch-Module enthalten den Code der neuen Funktion und eine “lp_patch”-Struktur, die angibt, welche Funktionen zu patchen sind, wo der Code für jede gepatchte Funktion steckt und in welchem Kernel-Objekt sich die zu patchende Funktion befindet.

Zunächst wird das Patch über “lp_register_patch()” beim Kern registriert, dann wird es über “lp_enable_patch()” aktiviert, wobei Ftrace den Execution Path umleitet. Zugleich erzeugt der Core im Userspace eine Sysfs-Hierarchie unter “/sys/kernel/livepatch” über die sich unter anderem die Adresse der neuen und alten Funktion abfragen lassen.

Über “echo 0 > /sys/kernel/livepatch/<patch>/enabled” lassen sich Patches deaktivieren. Der Kern kann keine Patch-Module entladen, er kann aber eine Referenz darauf loslassen, wenn der Admin sämtliche Patches deaktiviert, die eine Funktion im Modul betreffen. Ein Taint-Flag signalisiert schließlich, dass ein Kernel mit einem Live-Patch versehen wurde, was beim Debuggen hilft. Ein Beispiel-Patch findet man auf Github, die komplette Diskussion auf der Kernel-Mailingliste.

E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben