Das Grsecurity-Team hat am 4. September 2019 in einer ausführlichen Analyse beschrieben, wie mehrere Unachtsamkeiten dazu geführt haben, dass ein Spectre-v1-Patch im Linux-Kernel wirkungslos geblieben ist. Der fehlerhafte Fix wurde dabei nicht nur im Hauptentwicklungszweig übernommen, sondern anschließend auch in die stabilen Kernelzweige zurückportiert. Für Entwicklungsumgebungen, Build-Server und CI-Systeme, die auf Linux-Basis arbeiten, bedeutete das: Eine scheinbar korrekte Schutzmaßnahme gegen Spectre war in der Praxis ohne Wirkung.
Der Ausgangspunkt war ein Patch des Entwicklers Dianzhang Chen, der das Makro array_index_nospec() in einer bestimmten Funktion einsetzen sollte. Das Makro, seit Linux 4.16 im Kernel enthalten, bereinigt Array-Indizes auch bei spekulativer Ausführung und verhindert so das Ausnutzen von Spectre v1. Linus Torvalds übernahm den Patch in seinen Entwicklungszweig, passte ihn dabei aber an, um eine Compiler-Warnung zu beheben.
Zwei Fehler beim Zurückportieren
Beim Zurückportieren in die stabilen Zweige griff der zuständige Entwickler Greg Kroah-Hartman jedoch nicht auf Torvalds‘ korrigierten Patch zurück, sondern auf die fehlerhafte Vorfassung. Beim eigenen Versuch, dieselbe Compiler-Warnung zu beheben, tauschte Kroah-Hartman Codezeilen in einer Reihenfolge, die dazu führte, dass der Index vor der Bereinigung statt danach verwendet wird. Das Ergebnis: Die Schutzfunktion des Makros greift nicht, der Fix ist als Spectre-Gegenmittel ohne Effekt. Darüber hinaus fand dieser wirkungslose Patch den Weg in mehrere stabile Kernel-Versionen.
Kroah-Hartman hat den Fehler laut Grsecurity-Analyse noch am selben Tag korrigiert und die überarbeitete Fassung als Teil der nächsten Updates für die stabilen Zweige angekündigt. Das Git- und E-Mail-basierte Entwicklungsmodell des Linux-Kernels, das parallele Patches in mehreren Zweigen und mehrere verantwortliche Maintainer erfordert, hatte in diesem Fall dazu beigetragen, dass eine bereits bereinigte Fassung übersehen wurde.
Das Grsecurity-Team, das historisch ein schwieriges Verhältnis zur Linux-Community hat und dessen Patches Torvalds öffentlich kritisiert hat, nutzte die Analyse zugleich als Eigenwerbung für seine eigene Patch-Technik. Inhaltlich ist die Beschreibung des Fehlers laut Golem-Bericht aber belegt und nachvollziehbar.

