[compiler-rt] r205418 - [ASan] Fix incompatible runtimes check: don't iterate /proc/self/maps on every call to __asan_init
Alexey Samsonov
samsonov at google.com
Wed Apr 2 06:09:23 PDT 2014
Author: samsonov
Date: Wed Apr 2 08:09:22 2014
New Revision: 205418
URL: http://llvm.org/viewvc/llvm-project?rev=205418&view=rev
Log:
[ASan] Fix incompatible runtimes check: don't iterate /proc/self/maps on every call to __asan_init
Modified:
compiler-rt/trunk/lib/asan/asan_linux.cc
Modified: compiler-rt/trunk/lib/asan/asan_linux.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_linux.cc?rev=205418&r1=205417&r2=205418&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_linux.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_linux.cc Wed Apr 2 08:09:22 2014
@@ -96,6 +96,11 @@ static bool IsDynamicRTName(const char *
internal_strstr(libname, "libasan.so");
}
+static void ReportIncompatibleRT() {
+ Report("Your application is linked against incompatible ASan runtimes.\n");
+ Die();
+}
+
void AsanCheckDynamicRTPrereqs() {
// Ensure that dynamic RT is the first DSO in the list
const char *first_dso_name = 0;
@@ -113,27 +118,27 @@ void AsanCheckIncompatibleRT() {
if (__asan_rt_version == ASAN_RT_VERSION_UNDEFINED) {
__asan_rt_version = ASAN_RT_VERSION_DYNAMIC;
} else if (__asan_rt_version != ASAN_RT_VERSION_DYNAMIC) {
- Report("Your application is linked against "
- "incompatible ASan runtimes.\n");
- Die();
+ ReportIncompatibleRT();
}
} else {
- // Ensure that dynamic runtime is not present. We should detect it
- // as early as possible, otherwise ASan interceptors could bind to
- // the functions in dynamic ASan runtime instead of the functions in
- // system libraries, causing crashes later in ASan initialization.
- MemoryMappingLayout proc_maps(/*cache_enabled*/true);
- char filename[128];
- while (proc_maps.Next(0, 0, 0, filename, sizeof(filename), 0)) {
- if (IsDynamicRTName(filename)) {
- Report("Your application is linked against "
- "incompatible ASan runtimes.\n");
- Die();
+ if (__asan_rt_version == ASAN_RT_VERSION_UNDEFINED) {
+ // Ensure that dynamic runtime is not present. We should detect it
+ // as early as possible, otherwise ASan interceptors could bind to
+ // the functions in dynamic ASan runtime instead of the functions in
+ // system libraries, causing crashes later in ASan initialization.
+ MemoryMappingLayout proc_maps(/*cache_enabled*/true);
+ char filename[128];
+ while (proc_maps.Next(0, 0, 0, filename, sizeof(filename), 0)) {
+ if (IsDynamicRTName(filename)) {
+ Report("Your application is linked against "
+ "incompatible ASan runtimes.\n");
+ Die();
+ }
}
+ __asan_rt_version = ASAN_RT_VERSION_STATIC;
+ } else if (__asan_rt_version != ASAN_RT_VERSION_STATIC) {
+ ReportIncompatibleRT();
}
-
- CHECK_NE(__asan_rt_version, ASAN_RT_VERSION_DYNAMIC);
- __asan_rt_version = ASAN_RT_VERSION_STATIC;
}
}
#endif // SANITIZER_ANDROID
More information about the llvm-commits
mailing list