GWP-ASan и KFENCE — это инструменты вероятностного обнаружения памяти для пользовательского пространства и ядра соответственно. Когда эта функция включена, небольшое количество выделений защищено дополнительными страницами памяти, которые окружают выделенную память. Это позволяет обнаруживать переполнение буфера и использование после освобождения с незначительным снижением производительности. Даже при небольшой частоте выборки для защищенных выделений при масштабном развертывании они могут эффективно обнаруживать ошибки безопасности памяти. С момента своего появления эти инструменты помогли выявить многочисленные ошибки платформы и зарекомендовали себя как ценный инструмент для повышения стабильности и безопасности. Мы призываем поставщиков включить их и внимательно следить за ошибками, обнаруженными на устройствах конечных пользователей.
Разработчики должны проверять наличие сбоев, проверяя /data/tombstones
tombstones , logcat
или отслеживая конвейер DropboxManager
поставщика на предмет ошибок конечных пользователей.
Для получения дополнительной информации см. нашу документацию по отладке собственного кода Android.
Отладка собственного кода платформы AndroidGWP-ASan для обнаружения ошибок безопасности памяти в пользовательском пространстве
GWP-ASan был представлен в Android 11 для выделения кучи пользовательского пространства. Когда GWP-ASan обнаруживает ошибку, он записывает отчет о Cause: [GWP-ASan]:
и завершает процесс. Отчеты об ошибках содержат дополнительную информацию о выделении и освобождении, упрощающую определение основной причины.
GWP-ASan включается случайным образом при запуске для 1% системных процессов или приложений, а также для приложений, которые устанавливают android:gwpAsanMode
в своем файле AndroidManifest.xml
.
KFENCE для обнаружения ошибок безопасности памяти ядра
Android 12 представил KFENCE для выделения кучи ядра. Когда KFENCE обнаруживает ошибку, он записывает отчет о сбое, начинающийся с BUG: KFENCE,
отключает защитные страницы и продолжает выполнение. Это включает механизм обнаружения ошибок ядра, который минимально влияет на взаимодействие с пользователем.
Чтобы узнать больше о KFENCE, см. документацию, доступную на https://www.kernel.org .