Episodio 8: de Vlad Tsyrklevich en Seattle, WA (noviembre de 2019)
Episodios anteriores
La depuración de errores de seguridad de la memoria, como casos de usar después de liberar o de desbordamiento de búfer, puede ser difícil. Las herramientas como AddressSanitizer (ASan) son útiles para identificar errores de memoria en pruebas de unidades y fuzzers, pero muchos errores solo se manifiestan después de la implementación a los usuarios en los que la sobrecarga de ASan es extremadamente alta.
GWP-ASan es un detector de errores de memoria solo de montón diseñado para usarse en el mundo real. Detecta casos de uso después de la liberación, desbordamientos/desbordamientos de búfer y liberaciones dobles. A diferencia de ASan, no detecta errores en la pila ni en las globales.
Mediante el muestreo de un pequeño porcentaje de asignaciones, GWP-ASan puede proporcionar detección de errores probabilísticos con una sobrecarga de rendimiento y memoria insignificantes. GWP-ASan hará que el proceso falle de inmediato cuando se produzca un error de memoria con una asignación de muestra. Esto facilita la detección del error, ya que la falla ocurre justo donde se produce, en lugar de cuando se usa memoria dañada.
Al igual que ASan, los informes de fallas de GWP-ASan incluyen seguimientos de pila de asignación y desasignación para ayudar a depurar problemas de memoria. Veamos un ejemplo (crbug/956230) de algunos de los datos adicionales que se presentan en la IU de fallas:
Tanto el uso como la desasignación se originan en PDFiumEngine::ExtendSelection()
.
La fuente muestra rápidamente que el error se debe al uso de un iterador std::vector
invalidado.
GWP-ASan está habilitado en el canal estable para las asignaciones realizadas con malloc
/new
y PartitionAlloc
en Windows y macOS. La compatibilidad con Android está en progreso. Hasta ahora, se informaron más de 60 errores de GWP-ASan y alrededor del 70% se corrigieron. Las fallas de GWP-ASan son posibles problemas de seguridad que
pueden aprovecharse, así que clasifícalos rápidamente y solicita portabilidad a versiones anteriores
si es necesario.