Werbung
Am Wochenende beschäftigte sich der Sicherheitsforscher Alex Ionescu mit seinem ersten Ryzen-System. Um welches es sich dabei genau handelt, bleibt zunächst einmal unklar. In jedem Fall hat er sich den AMD PCI Driver genauer angeschaut, ohne dass bisher klar wurde, warum er genau diese Komponente unter die Lupe genommen hatte.
Dabei ist ihm aufgefallen, dass der Treiber bestimmte Werte der MSR (Model-Specific Register) verändert und diese veränderten Werte an den Prozessor weitergibt. Dies ist eigentlich recht ungewöhnlich, zumal hier Register dabei waren, die eigentlich laut Dokumentation über das BIOS gesetzt und danach (bzw. nach dem Boot-Vorgang) nicht wieder verändert werden sollten. Die dazu verwendete Ioctl-Schnittstelle (wird für Systemaufrufe für gerätespezifische Eingabe- / Ausgabeoperationen verwendet) ist zudem nicht abgesichert und so kann ein manipulierter Treiber beliebige Werte setzen, was in einem ersten Schritt dazu genutzt wurde, das System über einen Powershell-Befehl komplett zum Absturz zu bringen. Alleine dies sollte schon besorgniserregend sein.
Aber die Geschichte geht noch weiter, denn offenbar nutzt AMD diese Feedback-Option des PCI-Treibers, um Funktions-Patches einzuspielen. Über die Auswertung bestimmter Hashwerte ist es gelungen, die darin hinterlegten Anwendungen zu identifizieren. Es handelt sich um eine Sammlung aus 19 Spielen. Für diese wird der Micro-Op-Cache der ersten Zen-Generation (Ryzen-1000-Serie) aktiviert (genauer gesagt das Instruction Cache Configuration Register (IC_CFG)), für alle weiteren Spielen bleibt er hingegen deaktiviert. Für Prozessoren auf Basis der Zen-2-Architektur (Ryzen-3000-Serie) werden bestimmte Funktionen des L2- und L1-Caches aktiviert, bleiben für andere Anwendungen hingegen deaktiviert.
Die bisher identifizierten Anwendungen sind:
- Factorio
- Destiny 2
- H1Z1
- Jurassic World Evolution
- Rainbow Six
- Fallout 76
- League of Legend
- Battlefield V
- Warframe
- Apex Legends
- DOOM Eternal
- Call of Duty: Modern Warfare
- Overwatch
- Anthem
AMD führte den Micro-Op-Cache mit der ersten Zen-Generation ein. In ihm werden Mikrooperationen von bereits dekodierten Befehlssätzen gespeichert. Ein Micro-Op-Cache entlastet die Fetch- und Dekodier-Hardware effektiv, wodurch der Stromverbrauch sinkt und die Effektivität des Frontends mit bereits dekodierten Mikrooperationen gesteigert wird. Engpässe im Decoding der Befehlssätze werden minimiert. Der Micro-Op-Cache erhöht auch die Leistung, indem er dekodierte Mikrooperationen konsistenter an das Backend liefert. Intel setzt einen solchen Cache seit der P6-Architektur ein.
Wie groß die Auswirkungen auf die Leistung sind, lässt sich derzeit nicht sagen. Man müsste dies mit Zen-1- und Zen-2-Prozessoren testen und die besagten Funktionen, die vom PCI-Treiber verändert werden, auch wieder zurückstellen. Entscheidender ist aber wohl, dass AMD hier Funktionen, die als "bekannte Fehler, die manchmal zu Lock-Ups führen" und es "die Empfehlung für BIOS-Hersteller war, diese Funktionen zu deaktivieren", wieder aktiviert – so Alex Ionescu. Die eine oder andere Instabilität des eigenen Ryzen-Systems könnte daher rühren. Belegt sind Abstürze, die durch die Reaktivierung verursacht worden, aktuell aber noch nicht.
Offenbar sind keinerlei MSR von Prozessoren der aktuellen Ryzen-5000-Serie auf Basis der Zen-3-Architektur betroffen. Für Treiber für Grafikkarten sind solche Optimierungen genau das, was die Hersteller an Anpassungen für bestimmte Spiele machen. Dass dies in der Form jedoch über den PCI-Treiber und für Prozessoren realisiert wird, ist neu und war (zumindest uns) nicht bekannt.
Offen ist nun die Frage, in wie weit AMD darauf reagieren sollte. Ein wenig mehr Transparenz wäre im Falle der veränderten MSR nun sicherlich angebracht. Auf der anderen Seite sind spezielle Anpassungen für die Anwendungen keine Seltenheit und werden sowohl bei den Prozessoren, als auch bei den Grafikkarten schon lange durchgeführt.