Aller au contenu

Glossaire

Canari de pile

Valeur secrète placée entre les tampons locaux d'une fonction et ses données de retour sauvegardées, vérifiée avant le retour de la fonction pour détecter les débordements de tampon de pile.

Un canari de pile (aussi appelé stack cookie ou stack protector) est une valeur aléatoire que le compilateur écrit dans le cadre de pile d'une fonction, entre les tableaux locaux et le pointeur de cadre sauvegardé ainsi que l'adresse de retour. Avant que la fonction ne retourne, l'épilogue compare la valeur avec l'originale, stockée dans le stockage local au thread. Si un débordement linéaire d'un tampon local l'a modifiée, le programme s'interrompt avec *** stack smashing detected *** au lieu de retourner vers une adresse corrompue.

GCC et Clang l'activent avec -fstack-protector-strong ; MSVC utilise /GS. Sur glibc, l'octet de poids faible du canari est nul, ce qui empêche les fonctions de chaînes de le copier. Les canaris ne protègent pas les autres variables locales ni les écritures non linéaires. Voir indicateurs de durcissement des binaires.