Épisode 8:de Vlad Tsyrklevich à Seattle, Washington (novembre 2019)
Épisodes précédents
Le débogage des erreurs de sécurité de la mémoire, telles que les utilisations après libération (use-after-frees) ou les dépassements de tampon de tampon, peut s'avérer difficile. Des outils tels qu'AddressSanitizer (ASan) sont utiles pour identifier les erreurs de mémoire dans les tests unitaires et les fuzzers, mais de nombreux bugs ne se manifestent qu'après le déploiement auprès des utilisateurs où les frais généraux d'ASan sont prohibitifs.
GWP-ASan est un détecteur d'erreurs de mémoire de tas de mémoire uniquement conçu pour être utilisé de façon naturelle. Elle détecte les utilisations après libération (use-after-free), les dépassements de mémoire tampon/débordement inférieurs et les doubles libérations. Contrairement à ASan, il ne détecte pas les erreurs dans la pile ou dans les variables globales.
En échantillonnant un petit pourcentage d'allocations, GWP-ASan est en mesure de fournir une détection d'erreurs probabiliste avec un impact négligeable sur la mémoire et les performances. GWP-ASan entraîne le plantage immédiat du processus en cas d'erreur de mémoire avec une allocation échantillonnée. Cela permet de détecter plus facilement le bug, car le plantage se produit directement à l'endroit où l'erreur se produit, et non plus ultérieurement lorsque de la mémoire corrompue est utilisée.
Comme ASan, les rapports d'erreur GWP-ASan incluent des traces de la pile d'allocation et de désallocation pour vous aider à déboguer les problèmes de mémoire. Examinons un exemple (crbug/956230) de certaines des données supplémentaires présentées dans l'interface utilisateur du plantage:
L'utilisation et la désallocation proviennent toutes deux de PDFiumEngine::ExtendSelection()
.
La source montre rapidement que le bug concerne l'utilisation d'un itérateur std::vector
non valide.
GWP-ASan est activé sur la version stable pour les allocations effectuées avec malloc
/new
et PartitionAlloc
sous Windows et macOS. La prise en charge d'Android est en cours. Plus de 60 bugs GWP-ASan ont été signalés jusqu'à présent, et environ 70 % ont été corrigés. Les plantages de GWP-ASan sont tous des problèmes de sécurité pouvant être exploités. Veuillez les trier rapidement et demander des rétroportages si nécessaire.