Cyrix coma ошибка - Cyrix coma bug
В Cyrix coma ошибка это недостаток дизайна в Cyrix 6x86 (введен в 1996 г.), 6x86L, и рано 6x86MX процессоры что позволяет непривилегированный программа для повесить компьютер.
Открытие
По словам Эндрю Бальса, примерно во время открытия Ошибка F00F на Intel Pentium, Сергей Штылев из Москва нашел изъян в Cyrix процессор при разработке IDE драйвер диска в язык ассемблера. Александр Коносевич, из Омск, дополнительно исследовал ошибку и стал соавтором статьи с Уве Постом в Немецкий журнал о технологиях c't, назвав это «скрытой ошибкой CLI» (CLI - это инструкция, отключающая прерывает в x86 архитектура). Бальса, как участник Linux -kernel список рассылки, подтвердил, что следующие C программа (которая использует встроенный x86 -конкретный язык ассемблера ) может быть скомпилирован и запущен непривилегированный пользователь:
беззнаковый char c[4] = {0x36, 0x78, 0x38, 0x36};int основной(){ как м ( "movl $ c,% ebx" снова: xchgl (% ebx),% eax" "movl% eax,% edx" снова "jmp"" );}
Выполнение этой программы делает процессор полностью бесполезным, пока он не будет перезагружен, поскольку он входит в бесконечная петля этого не может быть прерванный. Это позволяет любому пользователю, имеющему доступ к системе Cyrix с этой ошибкой, выполнить атака отказа в обслуживании.
Это похоже на выполнение Остановиться и загореться инструкция, хотя ошибка комы - это не какая-то конкретная инструкция.
Анализ
Причина ошибки не в прервать маска, а также явное отключение прерываний. Вместо этого аномалия в Cyrix конвейер команд предотвращает обслуживание прерываний на время цикла; поскольку цикл никогда не заканчивается, прерывания никогда не будут обслуживаться. В xchg[1] инструкция атомный, что означает, что другим инструкциям не разрешено изменять состояние системы во время ее выполнения. Чтобы обеспечить эту атомарность, дизайнеры Cyrix сделали xchg бесперебойный. Из-за конвейерная обработка и прогнозирование ветвей однако еще один xchg попадает в конвейер до завершения предыдущего, вызывая тупик.
Обходные пути
Чтобы исправить непреднамеренные случаи ошибки, нужно вставить в цикл другую инструкцию, нет инструкция быть хорошим кандидатом. Cyrix предложила сериализовать код операции xchg, минуя конвейер. Однако эти методы не помогут предотвратить преднамеренные атаки.
Один из способов предотвратить эту ошибку - включить бит 0x10 в регистре конфигурации CCR1. Это отключает неявную блокировку шины, обычно выполняемую xchg инструкция. Поскольку процессоры, затронутые этой ошибкой, не были предназначены для работы в многопроцессорных системах, потеря xchg атомарность безвредна.[нужна цитата ]
Смотрите также
Заметки
внешние ссылки
- Раннее описание ошибки Эндрю Бальса
- Регистры cx6x86 (и недокументированные функции)