[HWASan] [MTE] disable MTE for HWASan binaries
Bug: 389848256
Test: atest hwasan_test with persist.arm64.memtag.default=sync
Test: atest bionic-unit-tests[-static]
Change-Id: I871932af1ed763e3b7d5f580052a009d5aa02e7d
diff --git a/libc/bionic/libc_init_mte.cpp b/libc/bionic/libc_init_mte.cpp
index eda2eec..d23b056 100644
--- a/libc/bionic/libc_init_mte.cpp
+++ b/libc/bionic/libc_init_mte.cpp
@@ -246,6 +246,7 @@
__attribute__((no_sanitize("hwaddress", "memtag"))) void __libc_init_mte(
const memtag_dynamic_entries_t* memtag_dynamic_entries, const void* phdr_start, size_t phdr_ct,
uintptr_t load_bias) {
+ if (__libc_shared_globals()->is_hwasan) return;
bool memtag_stack = false;
HeapTaggingLevel level =
__get_tagging_level(memtag_dynamic_entries, phdr_start, phdr_ct, load_bias, &memtag_stack);
diff --git a/libc/bionic/libc_init_static.cpp b/libc/bionic/libc_init_static.cpp
index 85e742c..0c962ff 100644
--- a/libc/bionic/libc_init_static.cpp
+++ b/libc/bionic/libc_init_static.cpp
@@ -167,7 +167,7 @@
}
__attribute__((no_sanitize("memtag"))) __noreturn static void __real_libc_init(
- KernelArgumentBlock& args, void* raw_args, void (*onexit)(void) __unused,
+ KernelArgumentBlock& args, void* raw_args __unused, void (*onexit)(void) __unused,
int (*slingshot)(int, char**, char**), structors_array_t const* const structors,
bionic_tcb* temp_tcb) {
BIONIC_STOP_UNWIND;
@@ -180,10 +180,12 @@
layout_static_tls(args);
__libc_init_main_thread_final();
__libc_init_common();
+#if !__has_feature(hwaddress_sanitizer)
__libc_init_mte(/*memtag_dynamic_entries=*/nullptr,
reinterpret_cast<ElfW(Phdr)*>(getauxval(AT_PHDR)), getauxval(AT_PHNUM),
/*load_bias = */ 0);
__libc_init_mte_stack(/*stack_top = */ raw_args);
+#endif
__libc_init_scudo();
__libc_globals.mutate(__libc_init_malloc);
__libc_init_profiling_handlers();
@@ -205,8 +207,9 @@
if (structors->fini_array_count > 0) {
__cxa_atexit(call_fini_array, const_cast<structors_array_t*>(structors), nullptr);
}
-
+#if !__has_feature(hwaddress_sanitizer)
__libc_init_mte_late();
+#endif
exit(slingshot(args.argc, args.argv, args.envp));
}