[SOS]GDT & Stack Ring0

David Decotigny david.decotigny at free.fr
Dim 27 Nov 14:41:25 CET 2005


Bonjour,

KAISER Edouard wrote:
> Je vais peut surement poser une question triviale, mais en regardant
> la GDT d'SOS je ne m'étais jamais rendu compte qu'il n'yavait pas de
> descripteur dédié à la pile, mais qu'on donnait à SS le même selecteur
> que celui des données.
> N'y a t il pas de ce fait un risque d'écrasement de données ?

Oui, risque il y a en effet. Dans sos, nous avons fait au plus simple.
Pour faire propre, il faudrait effectivement un/des segment(s) pour les
piles noyau. La question qui se pose apres : 1 seul segment avec
changement du descripteur de segment a chaque changemnt de contexte
(solution A) ? Ou (solution B) 1 descripteur de segment par pile noyau ?

La solution A est evidemment la plus economique mais elle pose une
limitation : a partir d'un thread T1, on ne peut pas acceder aux donnees
locales (sur la pile) des autres threads Tx... Or dans SOS on utilise de
tels partages de donnees sur la pile : les kwaitq par exemple sont
allouees sur la pile la plupart du temps, c'est plus simple qu'une
allocation de memoire complete. La solution B necessite d'utiliser des
LDT et/ou de gerer les allocations de descripteurs de segments dans la
GDT... et le partage de donnees sur la pile devient plus complique aussi.

Reste ensuite a savoir quoi faire de la detection d'un debordement de
pile. Doit-on supprimer le thread noyau fautif ? C'est au risque de
laisser des structures de donnees noyau ou des synchros dans un etat
incertain (euphemisme), entrainant probablement des bugs sournois a
moyenne echeance. Donc, AMHA, la seule politique viable me semble etre
d'arreter le systeme completement en tel cas.

Bonne journee,

-- 
http://david.decotigny.free.fr/


Plus d'informations sur la liste de diffusion Sos