Pentium-F00F-Bug
![](http://upload.wikimedia.org/wikipedia/commons/thumb/0/01/KL_Intel_Pentium_A80501.jpg/180px-KL_Intel_Pentium_A80501.jpg)
Als F00F-Bug oder kurz F0-Bug wird ein Fehler in Mikroprozessoren der Typen Intel Pentium, Pentium MMX, Pentium OverDrive (alle Prozessoren der P5-Reihe, außer der Quark CPU[1]) bezeichnet. Der Name bezieht sich auf die hexadezimale Darstellung des Assemblerbefehls, der den Fehler auslöst. Die offizielle Bezeichnung seitens Intel lautet invalid operand with locked CMPXCHG8B instruction[2] (deutsch: „Ungültiger Operand mit gesperrter CMPXCHG8B-Anweisung“).
Beschreibung
Die namensgebende Anweisung (hexadezimal: F0 0F C7 C8
...F0 0F C7 CF
) ist (in Intel-Syntax) LOCK CMPXCHG8B r32
(wobei der Operand ein Register sein muss). Der Befehl CMPXCHG8B
vergleicht den Inhalt der Register EDX und EAX mit einem 8-Byte-Wert im Speicher. In diesem Beispiel wird als Ziel ein 4-Byte-Register angegeben, was nicht ausreicht, um den 8 Byte großen Ergebniswert zu speichern.
Im Normalfall führt dieses Problem zu einer Exception; wird der Befehl aber mit dem Präfix „lock“ aufgerufen (welches eigentlich zur Realisierung von wechselseitigem Ausschluss gedacht ist), so wird der Exception-Handler nicht aufgerufen, das System bearbeitet keine Interrupts mehr und muss neu gestartet werden.
Der Befehl erfordert keine besonderen Rechte und galt seinerzeit wegen der großen Verbreitung von Intel-Prozessoren als kritisch. Zwar führte er nicht zu bleibenden Schäden, konnte aber unter bestimmten Umständen Datenverlust hervorrufen. Betriebssystemhersteller bauten daher Workarounds in ihre Produkte ein, die das Auftreten des Fehlers verhinderten.
Findet sich bei einem Linux-System in /proc/cpuinfo
ein Eintrag der Art f00f_bug: yes
, ist die CPU von diesem Fehler betroffen.
Weblinks
- Dr. Dobb’s: The Pentium F00F Bug (englisch)
- Microsoft Support: Invalid Operand with Locked Compare Exchange 8 Byte (CMPXCHG8B) Instruction (englisch) (Memento vom 23. Juli 2008 im Internet Archive)
- Intel Pentium Processor: Invalid Instruction Erratum Overview (englisch)