Linux-Kernel: Der Ubuntu-Bug, der Container tagelang lahmlegte

Anfang Juni konnten viele Nutzer von Ubuntu nach einem Update keine Docker-Container mehr starten. Betroffen waren davon vor allem diejenigen, die die aktuelle Ubuntu-Version 20.04 mit Langzeitsupport in einer Cloudumgebung einsetzten. Das Problem lässt sich auf einen Fehler im Linux-Kernel von Ubuntu zurückführen, den das Magazin LWN analysiert(öffnet im neuen Fenster) hat.
Der Auslöser für den Fehler, der letztlich in einer Kernelversion gelandet ist, die Ubuntu-Sponsor Canonical an seine Nutzer verteilt hat, liegt demnach an einer komplexen Kombination verschiedener Kernelversionen, Backports sowie auch Treibern, die als eigenständige Patches außerhalb des Hauptzweigs von Linux gepflegt werden, sogenannte Out-of-Tree-Patches.
Viele Treiber, Versionen und Patches
Dem Bericht zufolge nutzt Ubuntu die Funktionen gleich dreier verschiedener virtueller Dateisysteme des Linux-Kernels zur Unterstützung von Containertechniken. Dazu gehören OverlayFS, AUFS und ShiftFS. Die beiden letztgenannten sind dabei nicht im Hauptzweig eingepflegt. Hinzu kommt ProcFS, das für Checkpoint/Restore In Userspace (CRIU) genutzt wird. Der Zustand eines Prozesses kann damit eingefroren und später wiederhergestellt werden.
Ein in den Ubuntu-Kernel eingepflegter Patch sollte dabei eigentlich ein Problem lösen, das aus der Kombination von OverlayFS und ShiftFS entstanden ist. Dazu haben die Entwickler wiederum eine Funktion aus AUFS wiederverwendet. AUFS wird von Ubuntu aber eigentlich nur noch in dem eigenen Langzeitkernel für Ubuntu 20.04 durch Canonical unterstützt, nicht mehr in neueren Ubuntu-Versionen. Der Patch wurde dort dann also nicht mehr genutzt.
Für Nutzer mit neuer Hardware sowie standardmäßig für die Cloud-Images nutzt Ubuntu aber auch neuere Kernels als Backports in Ubuntu 20.04 (HWE-Stack), in denen AUFS bereitsteht. Das Team hat den Patch hier also beim Backport wieder einführen können. Durch interne Änderungen an OverlayFS war der Patch aber von einem neuen Problem betroffen, das letztlich zu einer Kernel-Panic führte. Damit lassen sich weder die Container noch die Cloud-Images ausführen.
Der Darstellung von LWN zufolge fiel dem Ubuntu-Kernel-Team zwar der Fehler auf und wurde behoben. Das Team vergaß aber offenbar, diese Fehlerbehebung auch in den HWE-Kernel der Version 5.13 einzupflegen. Das Übersehen führte dazu, dass ein fehlerhafter Kernel an die Nutzer verteilt wurde.
Das Team hat den Fehler zwar innerhalb von zwei Tagen behoben und Linux-Nutzer können vergleichsweise leicht auf einen älteren Kernel zurückwechseln. Der Vorgang zeigt jedoch, dass auch erfahrene Distributoren einfache Fehler mit großen Auswirkungen machen. Im Herbst 2019 kritisierten wir in einem Kommentar auch Google dafür , dass die Komplexität der Kernelpflege mit vielen Versionen und Zweigen zu Problemen und Sicherheitslücken führen kann.