F0 0F C7 C8

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

F0 0F C7 C816 — последовательность байтов, кодирующих некорректную инструкцию (команду) CMPXCHG8B для процессоров семейства x86. Выполнение этой инструкции на процессорах популярного семейства Intel Pentium, включая Pentium MMX и Pentium OverDrive, вследствие аппаратной ошибки, приводило к полному зависанию процессора.

В комбинации непривилигированным характером инструкции CMPXCHG8B, данная ошибка позволяет вызывать отказы небольших серверов и персональных компьютеров на Pentium, с помощью любой атаки на удаленное выполнение (переполнение буфера, вирус).

Инструкция представляет собой команду:

    lock cmpxchg8b eax

Операндом может быть любой другой регистр помимо eax. cmpxchg8b используется для сравнения содержимого пары регистров eax и edx с 8 байтами содержимого некоторого участка памяти. При этом происходит попытка поместить 8-байтовый результат в 4-байтный регистр.

Сама по себе эта команда просто вызывает исключение, однако при сочетании с префиксом lock (он используется для предотвращения обращения двух процессоров к одному и тому же участку памяти одновременно) обработчик исключений не вызывается, процессор перестает обрабатывать прерывания и для приведения его в рабочее состояние требуется перезагрузка.

Для выполнения этой инструкции не требуется наличия особых привилегий, и, ввиду высокого уровня распространенности процессоров Intel, проблема была серьёзной. Хотя она не наносила никакого непоправимого урона аппаратному обеспечению, но могла также быть причиной потери данных в тех случаях, когда сбой процессора возникал во время выполнения операции записи на диск при неочищенном буфере, выполнении прерывания или другой неатомарной операции.

Методы решения

[править | править код]
  • Для ядра Linux, совместно с Intel был разработан патч, устраняющий эту ошибку
  • Компания Microsoft также выпустила патчи для своих операционных систем семейства Windows (см. KB163852)
  • Для операционной системы OS/2 патч был выпущен фирмой IBM в виде специального базового драйвера CMPXCHG8.SYS, вызов которого можно было прописать в файл конфигурации системы config.sys
  • Начиная с процессора Pentium Pro ошибка была исправлена на аппаратном уровне.
  • Компания Intel производила бесплатную замену дефектных процессоров.