Linux fournit-il une zone de mémoire garantie inaccessible au-dessous de l’extrémité inférieure de la stack?

Est-ce que Linux fournit une zone de mémoire inaccessible au-dessous de l’extrémité inférieure de la stack dont la taille minimale est garantie? Et si une telle taille minimale garantie existe, de quoi s’agit-il?

Ou, en d’autres termes, quand devrais-je commencer à m’inquiéter de la façon dont alloca() me donne des pointeurs sur une mémoire valide, sans stack?

Comme le dit la page de manuel alloca :

Il n’y a aucune indication d’erreur si le cadre de la stack ne peut pas être étendu. (Cependant, après une allocation manquée, le programme est susceptible de recevoir un signal SIGSEGV s’il tente d’accéder à l’espace non alloué.)

Donc, il n’y a aucune indication du tout et on dit aussi:

Si l’allocation provoque un débordement de stack, le comportement du programme n’est pas défini.

Le problème de débordement de stack est un problème général avec la récursivité et pas vraiment spécifique à alloca ou disons des tableaux de longueur variable. En règle générale, vous devez trouver un moyen de limiter la profondeur de la récursivité, refactoriser une solution itérative ou utiliser votre propre stack dynamic (ce qui ne s’applique probablement pas à ce cas ).

Mettre à jour

Comme l’OP l’a découvert, Linux fournit une indication après coup en utilisant une page de garde après la stack de débordement de stack en générant un signal SIGBUS , qui répond à la première partie de la question.

Merci à @ ElliottFrisch pour m’avoir fait google ceci avec le nom correct … oups.

On dirait que la réponse est “dans les nouveaux kernelx: une page, dans les anciens kernelx: aucune protection de ce type”.

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=320b2b8de12698082609ebbc1a17165727f4c893