HWASan、ASan 和 KASAN

Hardware Address Sanitizer (HWASan)、Address Sanitizer (ASan) 和 Kernel Address Sanitizer (KASAN) 是一組應該在開發過程中使用的內存錯誤檢測工具。

他們為每個內存操作插入編譯器工具,這會增加大量開銷——2x CPU、15-30% RAM(ASan:100% RAM)、50% 代碼大小,這使得它們不適合在生產中使用。
由於為每個內存操作插入了檢測,因此它們檢測到更廣泛的內存安全錯誤,包括適用於堆棧和全局的錯誤。這補充了上述部分中描述的堆檢測工具。

開發人員應通過檢查/data/tombstoneslogcat的錯誤報告來檢查是否存在崩潰。

HWASan 和 ASan 用於檢測用戶空間內存安全漏洞

arm64 ,我們建議使用HWASan ,而對於 32 位arm和非 Arm 平台,我們建議使用ASan 。它們提供等效的功能,應該用於檢測用戶空間代碼中的內存安全錯誤。

啟用它們需要單獨構建,因為二進製文件與非地址清理版本不兼容。要啟用 HWASan,請在構建環境中設置SANITIZE_TARGET=hwaddress ,或者簡單地使用_hwasan-後綴的目標。
有關 HWASan 和 ASan 的更多信息,請參閱文檔。

HWAddress 清理地址清理

KASAN 用於檢測內核內存安全漏洞

KASAN 是上述用戶空間工具的內核對應物。它共享相同的編譯器實現。 KASAN 和 ASan/HWASan 是互補的,因為一種工具適用於內核,另一種適用於用戶空間。我們建議同時啟用兩者以減少構建配置的數量並減少測試矩陣。