Re: Pentium bug cz. II

Autor: Radosław Gancarz (no_spam_feanor_at_zeus.polsl.gliwice.pl)
Data: Tue 19 May 1998 - 18:33:39 MET DST


W grupie pl.comp.os.linux Rafał Jannkowski <rafj_at_friko3.onet.pl> (rafj_at_friko3.onet.pl) napisał(a):
> Dzięki za wszelkie odpowiedzi na mój poprzedni list -"Pentium bug", ale
> wydaje mi się, że nie o to mi chodziło. Podane programy faktycznie
> zawieszają WinNT, jednak nie radzą sobie z Win95 i Linuxem.
> Jakiś czas temu czytałem (chyba to był jakiś PC-Kurier z okresu ostatnich
> wakacji), że jeden z błędów Pentium polega na tym, że można go zawiescić z
> poziomu użytkownika nawet pod teoretycznie bezpiecznymi systemami jak Linux

Dostałeś tę instrukcję:

LOCK CMPXCHG8B EAX (F0 0F C7 C8)

Linuxy od AFAIR 2.0.31 mają kod umożliwiający obejście tego błędu
procesorów Pentium. Błąd jest we wszystkich (AFAIK) procesorach
Pentium i Pentium MMX Intela, nie dotyczy Pentium II, Pentium Pro
ani procesorów konkurencji.

Problem polega na tym, że w pewnych sytuacjach procesor nie zwalnia
szyny (prefiks LOCK) i czeka na jej zwolnienie.

> i WinNT. Podobno "odpowiedzialna" za to instrukcja nie jest generowana przez
> żadne normalne kompilatory - nawet assemblery. Tak więc napisanie takiego
> programu pewnie musiałoby polegać na wstawieniu tejże instrukcji edytorem
> hexalnym do już istnejącego programu.

Każdy asembler wygeneruje dowolną instrukcję jeśli użyjesz zaklęcia
DB (albo podobnego), podobnie możesz uruchamiać kawałek kodu w
tablicy o ile system (model pamięci) pójdzie na coś takiego.
A instrukcja jest swoją drogą nielegalna.

Kod który parę osób ci podało działał tak jak powinien - sprawdzałem
na Win95, WinNT, Linuxie 2.0.27.

Przypominam: int main[]={0xc8c70ff0};

-- 
------------------------------------------[KNNNSzMPChOChPKIM MEMBER]---
| Radosław Gancarz                       feanor_at_zeus.polsl.gliwice.pl |
-----------------------------------------------------------------------


To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 17:17:07 MET DST