[SOS]GDT & Stack Ring0

David Decotigny david.decotigny at free.fr
Dim 27 Nov 15:20:47 CET 2005


Bonjour,

Dave wrote:
> [ d2 ou Thomas corrigeront si je dis des bêtises. ;) ]
> 
> Le stack poisoning consiste à introduire une page virtuelle non
> utilisable (càd elle n'a pas les droits lecture, écriture et
> exécution) en fin de pile. Dès que des instructions commencent à
> vouloir utiliser les données ou code de cette page, cela génère une
> erreur de segmentation (/page fault/) qui permet à l'OS de savoir

Dans le cas de SOS ce n'est pas exactement ça. Par contre c'est ce qu'on
fait dans Kos et c'est ce qui se fait dans pas mal d'os exploitant la
MMU. Non, dans SOS, on se contente d'ecrire quelques entiers de 32bits
caracteristiques (magics are magic) en fond de pile. On verifie a chaque
changement de contexte qu'ils n'ont pas ete modifies. Si ils ont ete
modifies, c'est qu'un thread a explose sa pile. A contrario, si ils ne
sont pas modifies, ça ne signifie rien du tout. On peut juste esperer
qu'il n'y a pas eu d'explosion de pile ou, au pire, que cette explosion
est passee inaperçue ;)

La raison pour laquelle on fait du poisoning et pas de la detection par
page de garde (ie tes explications), c'est que les notions de faute de
page ou d'exception viennent dans les articles posterieurs (article 7 ?)
a celui sur les threads (article 5 ?). Ceci dit, c'est vrai qu'on
pourrait remplacer (avantageusement) ce poinsoning par un mecanisme de
page de garde une fois la faute de page expliquee (article 7 ?). Eh oui,
c'est une source de complexite supplementaire dans le code de sos : le
sequencement des articles.

Bonne journee,

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


Plus d'informations sur la liste de diffusion Sos