Pentium-F00F-Bug
# Pentium-F00F-Bug

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) 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 (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.

