Эпизод 8: Влад Цирклевич, Сиэтл, Вашингтон (ноябрь 2019 г.)
Предыдущие серии
Отладка ошибок безопасности памяти, таких как использование после освобождения или переполнение буфера, может быть затруднена. Такие инструменты, как AddressSanitizer (ASan), полезны для выявления ошибок памяти в модульных тестах и фаззерах, но многие ошибки проявляются только после развертывания для пользователей, где накладные расходы ASan непомерно высоки.
GWP-ASan — это детектор ошибок памяти, работающий только в куче, предназначенный для использования в реальных условиях. Он обнаруживает использование после освобождения, переполнение/опустошение буфера и двойное освобождение. В отличие от ASan, он не обнаруживает ошибок в стеке или в глобальных переменных.
Выбирая небольшой процент выделенных ресурсов, GWP-ASan способен обеспечить вероятностное обнаружение ошибок с незначительными затратами памяти и производительности. GWP-ASan приведет к немедленному сбою процесса при возникновении ошибки памяти при выборочном выделении. Это облегчает обнаружение ошибки, поскольку сбой происходит именно там, где была допущена ошибка, а не в какой-то более поздний момент, когда используется поврежденная память.
Как и ASan, отчеты о сбоях GWP-ASan включают в себя трассировку стека выделения и освобождения , что помогает устранить проблемы с памятью. Давайте посмотрим на пример ( crbug/956230 ) некоторых дополнительных данных, представленных в пользовательском интерфейсе при сбое:
Использование и освобождение происходят в PDFiumEngine::ExtendSelection()
. Источник быстро показывает, что ошибка заключается в использовании недействительного итератора std::vector
.
GWP-ASan включен на стабильном канале для выделений, выполненных с помощью malloc
/ new
и PartitionAlloc
в Windows и macOS. Поддержка Android находится в разработке. На данный момент зарегистрировано более 60 ошибок GWP-ASan, около 70% из них исправлено. Сбои GWP-ASan — это все потенциальные проблемы безопасности, которые могут быть использованы, поэтому, пожалуйста, быстро отсортируйте их и при необходимости запросите резервное копирование.