[MTE] remap stacks with PROT_MTE when requested by dlopened library
BYPASS_INCLUSIVE_LANGUAGE_REASON="man" refers to manual not person
Bug: 318749472
Test: atest pthread on MTE enabled device
Test: atest memtag_stack_dlopen_test on MTE enabled device
Test: manual with NDK r26b built app with fsanitize=memtag-stack
Change-Id: Iac191c31b87ccbdc6a52c63ddd22e7b440354202
diff --git a/linker/linker.cpp b/linker/linker.cpp
index 135eaa3..ffbf136 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -2212,6 +2212,14 @@
loading_trace.End();
if (si != nullptr) {
+ if (si->has_min_version(7) && si->memtag_stack()) {
+ LD_LOG(kLogDlopen, "... dlopen enabling MTE for: realpath=\"%s\", soname=\"%s\"",
+ si->get_realpath(), si->get_soname());
+ if (auto* cb = __libc_shared_globals()->memtag_stack_dlopen_callback) {
+ cb();
+ }
+ }
+
void* handle = si->to_handle();
LD_LOG(kLogDlopen,
"... dlopen calling constructors: realpath=\"%s\", soname=\"%s\", handle=%p",