-
Notifications
You must be signed in to change notification settings - Fork 13.4k
[sanitizer][Fuchsia] Add callback at end of __sanitizer_startup_hook #131886
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sanitizers using this hook on Fuchsia can define this function to do any extra stuff at the end of the startup hook. For now this is only used by HWASan which needs to explicitly be initialized before libc extensions are intitialized.
@llvm/pr-subscribers-compiler-rt-sanitizer Author: None (PiJoules) ChangesSanitizers using this hook on Fuchsia can define this function to do any extra stuff at the end of the startup hook. For now this is only used by HWASan which needs to explicitly be initialized before libc extensions are intitialized. Full diff: https://github.com/llvm/llvm-project/pull/131886.diff 5 Files Affected:
diff --git a/compiler-rt/lib/asan/asan_fuchsia.cpp b/compiler-rt/lib/asan/asan_fuchsia.cpp
index 96c41e9d42ba6..6876be1dca535 100644
--- a/compiler-rt/lib/asan/asan_fuchsia.cpp
+++ b/compiler-rt/lib/asan/asan_fuchsia.cpp
@@ -25,6 +25,11 @@
# include "asan_thread.h"
# include "lsan/lsan_common.h"
+namespace __sanitizer {
+// ASan doesn't need to do anything else special in the startup hook.
+void EarlySanitizerInit() {}
+} // namespace __sanitizer
+
namespace __asan {
// The system already set up the shadow memory for us.
diff --git a/compiler-rt/lib/hwasan/hwasan_fuchsia.cpp b/compiler-rt/lib/hwasan/hwasan_fuchsia.cpp
index d1696f8aa7962..647211bf199e1 100644
--- a/compiler-rt/lib/hwasan/hwasan_fuchsia.cpp
+++ b/compiler-rt/lib/hwasan/hwasan_fuchsia.cpp
@@ -31,6 +31,15 @@
SANITIZER_INTERFACE_ATTRIBUTE
THREADLOCAL uptr __hwasan_tls;
+namespace __sanitizer {
+void EarlySanitizerInit() {
+ // Setup the hwasan runtime before any `__libc_extensions_init`s are called.
+ // This is needed because libraries which define this function (like fdio)
+ // may be instrumented and either access `__hwasan_tls` or make runtime calls.
+ __hwasan_init();
+}
+} // namespace __sanitizer
+
namespace __hwasan {
bool InitShadow() {
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_fuchsia.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_fuchsia.cpp
index acbf3ebfc95c0..1ca50eb186a34 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_fuchsia.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_fuchsia.cpp
@@ -547,6 +547,8 @@ void __sanitizer_startup_hook(int argc, char **argv, char **envp,
__sanitizer::StoredEnviron = envp;
__sanitizer::MainThreadStackBase = reinterpret_cast<uintptr_t>(stack_base);
__sanitizer::MainThreadStackSize = stack_size;
+
+ EarlySanitizerInit();
}
void __sanitizer_set_report_path(const char *path) {
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_fuchsia.h b/compiler-rt/lib/sanitizer_common/sanitizer_fuchsia.h
index 26c1deab9e5fe..47e7537c1bdf1 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_fuchsia.h
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_fuchsia.h
@@ -32,6 +32,13 @@ struct MemoryMappingLayoutData {
void InitShadowBounds();
+// Individual sanitizers can define this to explicitly run something at the end
+// of `__sanitizer_startup_hook`. This can be useful if a sanitizer needs to do
+// extra work after the common startup hook code is called and before module
+// ctors are invoked. For example, hwasan can explicitly call its initializing
+// function here so it can be set up before libc extensions are initialized.
+void EarlySanitizerInit();
+
} // namespace __sanitizer
#endif // SANITIZER_FUCHSIA
diff --git a/compiler-rt/lib/ubsan/ubsan_init_standalone.cpp b/compiler-rt/lib/ubsan/ubsan_init_standalone.cpp
index 91c3f57b424b9..5083246b8b7f3 100644
--- a/compiler-rt/lib/ubsan/ubsan_init_standalone.cpp
+++ b/compiler-rt/lib/ubsan/ubsan_init_standalone.cpp
@@ -19,6 +19,13 @@
#include "ubsan_init.h"
#include "ubsan_signals_standalone.h"
+#if SANITIZER_FUCHSIA
+namespace __sanitizer {
+// UBSan doesn't need to do anything else special in the startup hook.
+void EarlySanitizerInit() {}
+} // namespace __sanitizer
+#endif // SANITIZER_FUCHSIA
+
namespace __ubsan {
class UbsanStandaloneInitializer {
|
vitalybuka
approved these changes
May 6, 2025
petrhosek
approved these changes
May 6, 2025
GeorgeARM
pushed a commit
to GeorgeARM/llvm-project
that referenced
this pull request
May 7, 2025
…lvm#131886) Sanitizers using this hook on Fuchsia can define this function to do any extra stuff at the end of the startup hook. For now this is only used by HWASan which needs to explicitly be initialized before libc extensions are intitialized.
PiJoules
added a commit
to PiJoules/llvm-project
that referenced
this pull request
May 7, 2025
I forgot to add this definition in llvm#131886.
PiJoules
added a commit
that referenced
this pull request
May 7, 2025
I forgot to add this definition in #131886.
llvm-sync bot
pushed a commit
to arm/arm-toolchain
that referenced
this pull request
May 7, 2025
…san (#138946) I forgot to add this definition in llvm/llvm-project#131886.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
compiler-rt:asan
Address sanitizer
compiler-rt:hwasan
Hardware-assisted address sanitizer
compiler-rt:sanitizer
compiler-rt:ubsan
Undefined behavior sanitizer
compiler-rt
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Sanitizers using this hook on Fuchsia can define this function to do any extra stuff at the end of the startup hook. For now this is only used by HWASan which needs to explicitly be initialized before libc extensions are intitialized.