diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/asan/CMakeLists.txt | 3 | ||||
-rw-r--r-- | lib/asan/asan_internal.h | 6 | ||||
-rw-r--r-- | lib/asan/asan_mapping.h | 33 | ||||
-rw-r--r-- | lib/asan/lit_tests/TestCases/Linux/time_null_regtest.cc | 20 | ||||
-rw-r--r-- | lib/asan/lit_tests/TestCases/Linux/zero-base-shadow32.cc | 24 | ||||
-rw-r--r-- | lib/asan/lit_tests/TestCases/Linux/zero-base-shadow64.cc | 24 | ||||
-rw-r--r-- | lib/asan/tests/CMakeLists.txt | 2 | ||||
-rw-r--r-- | lib/asan/tests/asan_noinst_test.cc | 28 |
8 files changed, 13 insertions, 127 deletions
diff --git a/lib/asan/CMakeLists.txt b/lib/asan/CMakeLists.txt index ad3f05488..5cbaa6413 100644 --- a/lib/asan/CMakeLists.txt +++ b/lib/asan/CMakeLists.txt @@ -38,16 +38,13 @@ set(ASAN_COMMON_DEFINITIONS if(ANDROID) list(APPEND ASAN_COMMON_DEFINITIONS - ASAN_FLEXIBLE_MAPPING_AND_OFFSET=0 ASAN_NEEDS_SEGV=0 ASAN_LOW_MEMORY=1) elseif(MSVC) list(APPEND ASAN_COMMON_DEFINITIONS - ASAN_FLEXIBLE_MAPPING_AND_OFFSET=0 ASAN_NEEDS_SEGV=0) else() list(APPEND ASAN_COMMON_DEFINITIONS - ASAN_FLEXIBLE_MAPPING_AND_OFFSET=1 ASAN_NEEDS_SEGV=1) endif() diff --git a/lib/asan/asan_internal.h b/lib/asan/asan_internal.h index 4f8f8e83c..289423a34 100644 --- a/lib/asan/asan_internal.h +++ b/lib/asan/asan_internal.h @@ -44,12 +44,6 @@ # define ASAN_HAS_EXCEPTIONS 1 #endif -// If set, asan uses the values of SHADOW_SCALE and SHADOW_OFFSET -// provided by the instrumented objects. Otherwise constants are used. -#ifndef ASAN_FLEXIBLE_MAPPING_AND_OFFSET -# define ASAN_FLEXIBLE_MAPPING_AND_OFFSET 0 -#endif - // If set, values like allocator chunk size, as well as defaults for some flags // will be changed towards less memory overhead. #ifndef ASAN_LOW_MEMORY diff --git a/lib/asan/asan_mapping.h b/lib/asan/asan_mapping.h index bdcf2f9e5..eac717518 100644 --- a/lib/asan/asan_mapping.h +++ b/lib/asan/asan_mapping.h @@ -63,31 +63,24 @@ static const u64 kDefaultShadowOffset64 = 1ULL << 44; static const u64 kDefaultShort64bitShadowOffset = 0x7FFF8000; // < 2G. static const u64 kMIPS32_ShadowOffset32 = 0x0aaa8000; -#if ASAN_FLEXIBLE_MAPPING_AND_OFFSET == 1 -extern "C" SANITIZER_INTERFACE_ATTRIBUTE uptr __asan_mapping_scale; -extern "C" SANITIZER_INTERFACE_ATTRIBUTE uptr __asan_mapping_offset; -# define SHADOW_SCALE (__asan_mapping_scale) -# define SHADOW_OFFSET (__asan_mapping_offset) +#define SHADOW_SCALE kDefaultShadowScale +#if SANITIZER_ANDROID +# define SHADOW_OFFSET (0) #else -# define SHADOW_SCALE kDefaultShadowScale -# if SANITIZER_ANDROID -# define SHADOW_OFFSET (0) +# if SANITIZER_WORDSIZE == 32 +# if defined(__mips__) +# define SHADOW_OFFSET kMIPS32_ShadowOffset32 +# else +# define SHADOW_OFFSET kDefaultShadowOffset32 +# endif # else -# if SANITIZER_WORDSIZE == 32 -# if defined(__mips__) -# define SHADOW_OFFSET kMIPS32_ShadowOffset32 -# else -# define SHADOW_OFFSET kDefaultShadowOffset32 -# endif +# if SANITIZER_MAC +# define SHADOW_OFFSET kDefaultShadowOffset64 # else -# if SANITIZER_MAC -# define SHADOW_OFFSET kDefaultShadowOffset64 -# else -# define SHADOW_OFFSET kDefaultShort64bitShadowOffset -# endif +# define SHADOW_OFFSET kDefaultShort64bitShadowOffset # endif # endif -#endif // ASAN_FLEXIBLE_MAPPING_AND_OFFSET +#endif #define SHADOW_GRANULARITY (1ULL << SHADOW_SCALE) #define MEM_TO_SHADOW(mem) (((mem) >> SHADOW_SCALE) + (SHADOW_OFFSET)) diff --git a/lib/asan/lit_tests/TestCases/Linux/time_null_regtest.cc b/lib/asan/lit_tests/TestCases/Linux/time_null_regtest.cc deleted file mode 100644 index 566409be6..000000000 --- a/lib/asan/lit_tests/TestCases/Linux/time_null_regtest.cc +++ /dev/null @@ -1,20 +0,0 @@ -// RUN: %clangxx_asan -O0 %s -fsanitize-address-zero-base-shadow -pie -o %t && %t 2>&1 | FileCheck %s - -// Zero-base shadow only works on x86_64 and i386. -// REQUIRES: x86_64-supported-target - -// A regression test for time(NULL), which caused ASan to crash in the -// zero-based shadow mode on Linux. -// FIXME: this test does not work on Darwin, because the code pages of the -// executable interleave with the zero-based shadow. - -#include <stdio.h> -#include <stdlib.h> -#include <time.h> - -int main() { - time_t t = time(NULL); - fprintf(stderr, "Time: %s\n", ctime(&t)); // NOLINT - // CHECK: {{Time: .* .* .*}} - return 0; -} diff --git a/lib/asan/lit_tests/TestCases/Linux/zero-base-shadow32.cc b/lib/asan/lit_tests/TestCases/Linux/zero-base-shadow32.cc deleted file mode 100644 index e6bcc5597..000000000 --- a/lib/asan/lit_tests/TestCases/Linux/zero-base-shadow32.cc +++ /dev/null @@ -1,24 +0,0 @@ -// RUN: %clangxx_asan -O0 -fsanitize-address-zero-base-shadow -fPIE -pie %s -o %t -// RUN: not %t 2>&1 | FileCheck %s -// RUN: %clangxx_asan -O1 -fsanitize-address-zero-base-shadow -fPIE -pie %s -o %t -// RUN: not %t 2>&1 | FileCheck %s -// RUN: %clangxx_asan -O2 -fsanitize-address-zero-base-shadow -fPIE -pie %s -o %t -// RUN: not %t 2>&1 | FileCheck %s - -// Zero-base shadow only works on x86_64 and i386. -// REQUIRES: i386-supported-target, asan-32-bits - -#include <string.h> -int main(int argc, char **argv) { - char x[10]; - memset(x, 0, 10); - int res = x[argc * 10]; // BOOOM - // CHECK: {{READ of size 1 at 0x.* thread T0}} - // CHECK: {{ #0 0x.* in main .*zero-base-shadow32.cc:}}[[@LINE-2]] - // CHECK: {{Address 0x.* is .* frame}} - // CHECK: main - - // Check that shadow for stack memory occupies lower part of address space. - // CHECK: =>0x1 - return res; -} diff --git a/lib/asan/lit_tests/TestCases/Linux/zero-base-shadow64.cc b/lib/asan/lit_tests/TestCases/Linux/zero-base-shadow64.cc deleted file mode 100644 index 1db725c95..000000000 --- a/lib/asan/lit_tests/TestCases/Linux/zero-base-shadow64.cc +++ /dev/null @@ -1,24 +0,0 @@ -// RUN: %clangxx_asan -O0 -fsanitize-address-zero-base-shadow -fPIE -pie %s -o %t -// RUN: not %t 2>&1 | FileCheck %s -// RUN: %clangxx_asan -O1 -fsanitize-address-zero-base-shadow -fPIE -pie %s -o %t -// RUN: not %t 2>&1 | FileCheck %s -// RUN: %clangxx_asan -O2 -fsanitize-address-zero-base-shadow -fPIE -pie %s -o %t -// RUN: not %t 2>&1 | FileCheck %s - -// Zero-base shadow only works on x86_64 and i386. -// REQUIRES: x86_64-supported-target, asan-64-bits - -#include <string.h> -int main(int argc, char **argv) { - char x[10]; - memset(x, 0, 10); - int res = x[argc * 10]; // BOOOM - // CHECK: {{READ of size 1 at 0x.* thread T0}} - // CHECK: {{ #0 0x.* in main .*zero-base-shadow64.cc:}}[[@LINE-2]] - // CHECK: {{Address 0x.* is .* frame}} - // CHECK: main - - // Check that shadow for stack memory occupies lower part of address space. - // CHECK: =>0x0f - return res; -} diff --git a/lib/asan/tests/CMakeLists.txt b/lib/asan/tests/CMakeLists.txt index fc0f1788b..7ae7a7e68 100644 --- a/lib/asan/tests/CMakeLists.txt +++ b/lib/asan/tests/CMakeLists.txt @@ -50,11 +50,9 @@ list(APPEND ASAN_UNITTEST_COMMON_CFLAGS -DASAN_UAR=0) if(ANDROID) list(APPEND ASAN_UNITTEST_COMMON_CFLAGS - -DASAN_FLEXIBLE_MAPPING_AND_OFFSET=0 -DASAN_NEEDS_SEGV=0) else() list(APPEND ASAN_UNITTEST_COMMON_CFLAGS - -DASAN_FLEXIBLE_MAPPING_AND_OFFSET=1 -DASAN_NEEDS_SEGV=1) endif() diff --git a/lib/asan/tests/asan_noinst_test.cc b/lib/asan/tests/asan_noinst_test.cc index cb6223c09..0abb398e9 100644 --- a/lib/asan/tests/asan_noinst_test.cc +++ b/lib/asan/tests/asan_noinst_test.cc @@ -25,34 +25,6 @@ #include <vector> #include <limits> -#if ASAN_FLEXIBLE_MAPPING_AND_OFFSET == 1 -// Manually set correct ASan mapping scale and offset, as they won't be -// exported from instrumented sources (there are none). -# define FLEXIBLE_SHADOW_SCALE kDefaultShadowScale -# if SANITIZER_ANDROID -# define FLEXIBLE_SHADOW_OFFSET (0) -# else -# if SANITIZER_WORDSIZE == 32 -# if defined(__mips__) -# define FLEXIBLE_SHADOW_OFFSET kMIPS32_ShadowOffset32 -# else -# define FLEXIBLE_SHADOW_OFFSET kDefaultShadowOffset32 -# endif -# else -# if defined(__powerpc64__) -# define FLEXIBLE_SHADOW_OFFSET kPPC64_ShadowOffset64 -# elif SANITIZER_MAC -# define FLEXIBLE_SHADOW_OFFSET kDefaultShadowOffset64 -# else -# define FLEXIBLE_SHADOW_OFFSET kDefaultShort64bitShadowOffset -# endif -# endif -# endif -SANITIZER_INTERFACE_ATTRIBUTE uptr __asan_mapping_scale = FLEXIBLE_SHADOW_SCALE; -SANITIZER_INTERFACE_ATTRIBUTE uptr __asan_mapping_offset = - FLEXIBLE_SHADOW_OFFSET; -#endif // ASAN_FLEXIBLE_MAPPING_AND_OFFSET - extern "C" { // Set specific ASan options for uninstrumented unittest. const char* __asan_default_options() { |