Chyba v kómatu Cyrix - Cyrix coma bug
The Chyba v kómatu Cyrix je designová chyba v Cyrix 6x86 (představen v roce 1996), 6x86L a brzy 6x86MX procesory který umožňuje neprivilegovaný program do pověsit počítač.
Objev
Podle Andrewa Balsa, v době objevení Chyba F00F na Intel Pentium, Serguei Shtyliov z Moskva našel chybu v a Cyrix procesor při vývoji IDE ovladač disku v montážní jazyk. Alexandr Konosevich, od Omsk, dále prozkoumali chybu a spoluautorem článku s Uwe Post v Němec technologický časopis ne, volat to "skrytá chyba CLI" (CLI je instrukce, která zakáže přerušení v x86 architektura). Balsa, jako člen na Linux -kernel mailing list, potvrdil, že následující C program (který používá inline x86 -charakteristický montážní jazyk ) by mohl být sestaven a spuštěn pomocí neprivilegovaný uživatel:
nepodepsaný char C[4] = {0x36, 0x78, 0x38, 0x36};int hlavní(){ asm ( "movl $ c,% ebx" "znovu: xchgl (% ebx),% eax" "movl% eax,% edx" "znovu jmp" );}
Provedení tohoto programu činí procesor zcela zbytečným, dokud není restartován, jakmile vstoupí do nekonečná smyčka to nemůže být přerušeno. To umožňuje každému uživateli s přístupem k systému Cyrix s touto chybou provést a útok odmítnutí služby.
Je to podobné jako při provádění a Zastavte a zapalte instrukce, ačkoli chyba komatu není žádná konkrétní instrukce.
Analýza
Co chybu způsobuje, není přerušit maska, ani nejsou výslovně zakázána přerušení. Místo toho anomálie v Cyrixu instrukční potrubí brání přerušení obsluhy po dobu trvání smyčky; protože smyčka nikdy nekončí, přerušení nebudou nikdy obsluhována. The xchg[1] instrukce je atomový, což znamená, že jiné instrukce nemají povoleno měnit stav systému během jeho provádění. Aby byla zajištěna tato atomicita, designéři ve společnosti Cyrix vyrobili xchg nepřerušitelný. Kvůli potrubí a větev predikce, nicméně, jiný xchg vstoupí do potrubí před dokončením předchozího, což způsobí a zablokování.
Řešení
Oprava neúmyslných instancí chyby spočívá v vložení další instrukce do smyčky, nop instrukce je dobrým kandidátem. Cyrix navrhl serializaci operačního kódu xchg, čímž obejde potrubí. Tyto techniky však nebudou sloužit k zabránění záměrným útokům.
Jedním ze způsobů, jak této chybě zabránit, je povolit bit 0x10 v konfiguračním registru CCR1. To zakáže implicitní uzamčení sběrnice, které obvykle provádí xchg návod. Vzhledem k tomu, že procesory ovlivněné touto chybou nebyly navrženy pro práci v systémech s více procesory, ztráta xchg atomicita je neškodná.[Citace je zapotřebí ]
Viz také
Poznámky
externí odkazy
- Časný popis chyby Andrewa Balsy
- Cx6x86 registry (a nezdokumentované funkce)