Linux Kernel-Patches ohne Reboots

Eine neu angekündigte Software mit dem Names Ksplice soll Linux Kernel-Patches ohne lästige Reboots ermöglichen. Dies ist besonders interessant auf Systemen, für die schon eine kurze Auszeit nicht akzeptabel ist, so zum Beispiel auch einige eingebettete Systeme.

Ksplice benötigt den Quellenbaum des laufenden Kernels und einen Patch. Dann erzeugt die Software zwei Kernel, einen mit eingebautem Patch und den zweiten ohne. Die Kernel werden mit speziellen Optionen übersetzt, die es ermöglichen, leicht zu erkennen, welche Funktionen sich durch den Patch ändern. Ksplice vergleicht dann beide Versionen des Kernels, um die sich ändernden Funktionen zu finden. Sobald alle sich ändernden Funktionen in einer Liste zusammengefasst sind, übersetzt Ksplice ein Kernelmodul mit sämtlichen neuen Funktionen. Anschließend wird das fertige Modul von Ksplice geladen. Nun folgt der trickreiche Teil der Software: Ksplice startet mit dem Aufruf stop_machine_run() einen Thread mit sehr hoher Priorität auf jedem verfügbaren Prozessor. Dann untersucht Ksplice alle laufenden Threads im System, um sicherzustellen, dass kein Theard mehr eine der ausgetauschten Funktionen benutzt. Sollte dem so sein, versucht Ksplice es zu einem späteren Zeitpunkt erneut.

Dieses aufwändige und nicht sehr elegante Verfahren birgt natürlich Grenzen in sich. Änderungen an der Datenstruktur können mit diesem Mechanismus nicht in den Kernel gepatcht werden. Wenn Ksplice vergebens auf noch laufende Threads wartet, kann ebenfalls kein Patch in Betrieb genommen werden. Kernelfunktionen wie sys_poll() oder sys_waitpid() werden sehr wahrscheinlich immer in irgendwelchen laufenden Prozessen vorkommen und können daher nicht ausgetauscht werden. Daraus ergibt sich das Fazit, dass grundlegende Funktionen, mittels dieser Methode, nicht im laufenden System geändert werden.

Ein Test der Ksplice-Entwickler hat gezeigt, dass von 50 Sicherheitspatches, die mit Ksplice eingespielt werden sollten, acht aufgrund der genannten Grenzen nicht eingespielt werden konnten.

Dieses Verfahren hätte sogar Chancen, mit in die Hauptlinie des Kernels aufgenommen zu werden. Allerdings hält Microsoft zur Zeit ein Patent, welches auf dieses Verfahren zutreffen könnte, und eine Aufnahme daher potentiell verhindert.

Ksplice kann von der Projektseite (http://web.mit.edu/ksplice/) bezogen werden.

weitere Informationen:
- http://web.mit.edu/ksplice/doc/ksplice.pdf