Login
Newsletter
Werbung

Mi, 24. Januar 2018, 09:40

Software::Security

LLVM bindet Retpoline-Unterstützung ein

Nachdem bereits GCC eine Unterstützung der Retpoline-Patches in der kommenden Version der Compilersammlung ankündigte, hat auch LLVM die initiale Unterstützung gegen den Spectre-Angriff in die reguläre Codebasis eingebunden.

llvm.org

Bereits Mitte dieses Monats stellte Google eine Möglichkeit vor, wie die Angriffe mittels Spectre Variante 2 (Branch Target Injection) unter Linux mit relativ wenig Ressourcen verhindert werden können. Die Retpoline getaufte Lösung benötige neben Korrekturen im Kernel aber auch diverse Anpassungen an den Compilern, um wirksam gegen die Ausnutzung der Lücke vorgehen zu können. Eine entsprechende Anpassung in GCC lieferte Google gleich nach und am vorletzten Wochenende flossen die benötigten Änderungen in Form der Schalter -mindirect-branch und -mindirect-branch-register in die kommende Version 8 von GCC ein. Eine zeitnahe Rückportierung nach GCC 7 wurde ebenfalls angekündigt.

Nun zieht auch LLVM nach. LLVM ist eine modulare Compiler-Architektur mit einem an RISC-Maschinen angelehnten virtuellen Befehlssatz und beinhaltet Typinformation und Datenfluss-Information, was unter anderem ausgefeilte Transformationen des Objektcodes, andererseits aber auch eine bessere Analyse erlaubt. Kennzeichnend ist unter anderem, dass sämtliche Zeitphasen eines Programms zur Optimierung herangezogen werden können. Sinn von LLVM ist, eine Architektur bereitzustellen, die durch verschiedene Frontends genutzt wird. Um die Erzeugung des ausführbaren Codes kümmert sich schlussendlich dann LLVM, weshalb auch dieser Teil an die Retpoline-Patches angepasst werden muss.

Wie die Entwickler bereits kurz nach der Vorstellung der Patch-Reihe für LLVM schrieben, erwarten auch sie einen relativ begrenzten Einfluss auf die Geschwindigkeit. So schrieb Chandler Carruth am 4. Januar, dass sich der Geschwindigkeitsabfall bei »typischen« Serveranwendungen bei ca. 2 Prozent bewegen sollte. Bei spezialisierten Aufrufen oder bei »Microbenchmarks« könnte der Abfall aber teils dramatischer ausfallen, wobei aber auch hier durch dedizierte Optimierungen relativ kleine Einbußen erreicht werden könnten. Gesteuert werden die Optimierungen mittels der Optionen -mretpoline und -mretpoline-external-thunk.

Mittlerweile sind die Korrekturen in den Entwicklungszweig des Projekts eingeflossen. Eine entsprechende Freigabe erfolgte Anfang der Woche, sodass davon auszugehen ist, dass eine Korrektur in der kommenden Hauptversion von LLVM enthalten sein wird. Eine Portierung auf eine der älteren Versionen 6.0 und 5.0 ist geplant und soll »schnellstmöglich« erfolgen.

Update (24.01.2017 10:52, demon): Die Parametrisierung von GCC stimmte nicht mit dem Quellcode überein. Der Fehler wurde korrigiert.

Werbung
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung