Aller au contenu

Glossaire

Double free

Libérer deux fois la même allocation sur le tas, ce qui corrompt les listes de blocs libres de l'allocateur et peut mener à une corruption mémoire (CWE-415).

Un double free (CWE-415) survient lorsqu'un programme passe plus d'une fois le même pointeur à free (ou delete). L'allocateur enregistre alors deux fois le même bloc dans ses listes de blocs libres, si bien que deux allocations ultérieures peuvent recevoir des zones mémoire qui se chevauchent. La cause typique est un chemin d'erreur et un chemin de nettoyage qui croient tous deux être propriétaires de l'objet.

La glibc moderne détecte de nombreux cas et s'interrompt avec free(): double free detected in tcache 2. AddressSanitizer signale chaque occurrence avec les deux traces de libération. Corrigez-le avec un point de nettoyage unique et en mettant le pointeur à NULL après l'avoir libéré. Voir corruption du tas et use-after-free.