F0 0F C7 C8

F0 0F C7 C8  är en sekvens av byte som bildar en ogiltig maskininstruktion för x86 - familjens processorer . I processorer Pentium MMX och Pentium OverDrive , på grund av ett hårdvarufel, ledde ett kommando, som exekveras på vilken behörighetsnivå som helst, till en död hängning av processorn, vilket negativt påverkade systemets tillförlitlighet som helhet.

Beskrivning

Instruktionen är ett kommando:

lock cmpxchg8b eax

Operanden kan vara vilket register som helst förutom eax. cmpxchg8b används för att jämföra innehållet i ett par register eax och edx med 8 byte av innehållet i något minnesområde. Detta försöker lägga in ett 8-byte-resultat i ett 4-byte-register.

I sig själv kastar detta kommando helt enkelt ett undantag , men när det kombineras med låsprefixet (det används för att förhindra två processorer från att komma åt samma minnesområde samtidigt), anropas inte undantagshanteraren, processorn slutar bearbeta avbrott , och en omstart krävs för att få den till ett fungerande tillstånd.

Denna instruktion kräver inga speciella privilegier , och på grund av den höga förekomsten av Intel-processorer var problemet allvarligt. Även om det inte orsakade någon permanent skada på hårdvaran, kan det också orsaka dataförlust i fall där ett processorfel inträffade under en diskskrivningsoperation med en spolad buffert, ett avbrott eller annan icke-atomär operation.

Lösningsmetoder

Se även

Länkar