HWASan、ASan 和 KASAN

Hardware Address Sanitizer (HWASan)、Address Sanitizer (ASan) 和 Kernel Address Sanitizer (KASAN) 是应在开发期间使用的内存 bug 检测工具。

它们会为每项内存操作插入编译器插桩,这会增加大量开销 - 2 倍 CPU、15-30% RAM(ASan:100% RAM)、50% 代码大小,这些因素使得它们不适合在生产环境中使用。
由于每次内存操作都会插入插桩,因此可以检测更广泛的内存安全 bug,包括适用于堆栈和全局的 bug。这为以上各部分中所述的堆检测工具提供了有力补充。

开发者应通过 /data/tombstoneslogcat 查看 bug 报告,以检查是否发生了崩溃。

用于检测用户空间内存安全 bug 的 HWASan 和 ASan

对于 arm64,我们建议使用 HWASan;对于 32 位 arm 和非 Arm 平台,我们建议使用 ASan。两者提供的功能相同,并且都应当用于检测用户空间代码中的内存安全 bug。

启用这些工具需要单独的 build,因为二进制文件与经过非地址 (non-address) 排错后的版本不兼容。如需启用 HWASan,请在构建环境中设置 SANITIZE_TARGET=hwaddress,或者直接使用带 _hwasan- 后缀的目标。
如需详细了解 HWASan 和 ASan,请参阅文档。

HWAddress Sanitizer Address Sanitizer

用于检测内核内存安全 bug 的 KASAN

KASAN 是上述用户空间工具的内核版本。它采用相同的编译器实现。KASAN 和 ASan/HWASan 互为补充,因为其中一个工具适用于内核,另一个工具适用于用户空间。我们建议同时启用这两者以减少 build 配置数量并减少测试矩阵。