forked from OSchip/llvm-project
[ASan] Fix incompatible runtimes check: don't iterate /proc/self/maps on every call to __asan_init
llvm-svn: 205418
This commit is contained in:
parent
6cc687541f
commit
11ff0a26a4
|
@ -96,6 +96,11 @@ static bool IsDynamicRTName(const char *libname) {
|
|||
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
|
||||
|
|
Loading…
Reference in New Issue