[GWP-ASan] Fix non-reentrant libc_globals init behaviour.
The WriteProtected mutator for __libc_globals isn't reentrant.
Previously we were calling __libc_globals.mutate() inside of GWP-ASan's
libc initialisation, which is called inside the __libc_globals.mutate().
This causes problems with malloc_debug and other malloc shims, as they
fail to install when GWP-ASan is sampling their processes.
Bug: 135634846
Test: atest bionic
Change-Id: Iae51faa8d78677eeab6204b6ab4f3ae1b7517ba5
diff --git a/libc/bionic/malloc_common.cpp b/libc/bionic/malloc_common.cpp
index da68c80..ed5537f 100644
--- a/libc/bionic/malloc_common.cpp
+++ b/libc/bionic/malloc_common.cpp
@@ -322,7 +322,9 @@
errno = EINVAL;
return false;
}
- return MaybeInitGwpAsan(*reinterpret_cast<bool*>(arg));
+ __libc_globals.mutate([&](libc_globals* globals) {
+ return MaybeInitGwpAsan(globals, *reinterpret_cast<bool*>(arg));
+ });
}
errno = ENOTSUP;
return false;