[OSy] Nedeterministicke chovanie - preco?

Peter Júnoš petoju at gmail.com
Fri Nov 9 02:04:38 CET 2012


Dobry den,

kernel sa zacal chovat divne - mate aspon nejaky napad, ci by to mohlo
byt?

Predtym padal nahodne - to by som este chapal (nieco s pointerami), ale
teraz uz pada v docela malom kusku programu hned na zaciatku
bsp_start(). Je pomerne divne, ze v tom malom kusku nerobim takmer
ziadne nebezpecne operacie - akurat volam inicializaciu printeru a ten
si inicializuje spinlock ("globalny", staticky alokovany - akurat preda
jeho adresu dalej - na tu sa nieco malo zapise).
Ked sa inicializacia pointeru vrati, tak to zvladne este par instrukcii
a potom to uz spadne. Ziaden z prikazov pritom vobec nemusi manipulovat
s globalnym stavom ani so zamkami.
Teda postupnost prikazov

puts("aaa"); puts("bbb");

dopadne tak, ze prvy prebehne v pohode a v druhom dostane puts ako
parameter adresu v mapovanej casti pamati, co vyvola vynimku. Puts inak
beha dobre a kedze je to 4 riadkovy kod bez zamkov a dalsich
serepeticiek, tak je vidiet, ze by tam chyba nemala byt.

Jan Mares, co to robi so mnou mi posielal este absurdnejsi kus kodu
size_t* addr  = &lock->is_opened;
size_t* addr2 = &lock->is_opened;

addr = 0x20
addr2 = 0x80095a2...

U toho bohuzial neviem, ako presne sa k tomu dostal - na moj kod a
najdenie priciny mi stacil debugger.

Kedze su interrupty zakazane, tak by sa nemal objavit nikto mimo hlavne
vlakno, kto by to zeditoval.

Ako teda toto co najjednoduchsie riesit? Mate aspon nejaky napad, co tu
moze byt zle?

Dakujem za pripadne napady / rady.
-- 
Peter Júnoš
email, jabber: petoju at gmail.com

"Every language has an optimization operator. In C++ that operator is '//'"





More information about the NSWI004 mailing list