HWASan、ASan、KASAN

Hardware Address Sanitizer(HWASan)、Address Sanitizer(ASan)、Kernel Address Sanitizer(KASAN)は、開発時に使用する必要があるメモリバグ検出ツールです。

メモリ オペレーションごとにコンパイラ インストルメンテーションが挿入され、オーバーヘッドが大幅に増えるため(CPU で 2 倍、RAM で 15~30%(ASan: 100% RAM)、コードサイズで 50%)、本番環境での使用には適しません。
インストルメンテーションがメモリ オペレーションごとに挿入されるため、スタックやグローバルに適用されるものを含め、メモリ安全性のバグを幅広く検出できます。これは、前のセクションで説明したヒープ検出ツールを補完します。

デベロッパーは、/data/tombstones または logcat でバグレポートをチェックして、クラッシュがないか確認する必要があります。

ユーザー空間のメモリ安全性のバグを検出する HWASan と ASan

arm64 では HWASan を使用することをおすすめしますが、32 ビットの arm プラットフォームと Arm 以外のプラットフォームでは ASan を使用することをおすすめします。これらの機能は同等であり、ユーザー空間コードのメモリ安全性のバグを検出するために使用します。

バイナリはアドレス サニタイズされていないバージョンと互換性がないため、これらを有効にするには別のビルドが必要です。HWASan を有効にするには、ビルド環境で SANITIZE_TARGET=hwaddress を設定するか、単に _hwasan- サフィックスを付けたターゲットを使用します。
HWASan と ASan について詳しくは、以下のドキュメントをご覧ください。

HWAddress Sanitizer Address Sanitizer

カーネルのメモリ安全性のバグを検出する KASAN

KASAN は、上記のユーザー空間ツールのカーネル版です。同じコンパイラ実装を共有します。KASAN と ASan / HWASan は補完的です。一方のツールはカーネルに適用され、他方のツールはユーザー空間に適用されます。ビルド構成の数を減らし、テスト マトリックスを減らすために、両方を同時に有効にすることをおすすめします。