diff options
| -rwxr-xr-x | compiler-rt/lib/asan/scripts/asan_device_setup | 5 | ||||
| -rw-r--r-- | compiler-rt/lib/asan/tests/asan_test.cc | 21 | ||||
| -rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_flags.inc | 2 | 
3 files changed, 14 insertions, 14 deletions
diff --git a/compiler-rt/lib/asan/scripts/asan_device_setup b/compiler-rt/lib/asan/scripts/asan_device_setup index fdfc46f6e5b..c807df3cd25 100755 --- a/compiler-rt/lib/asan/scripts/asan_device_setup +++ b/compiler-rt/lib/asan/scripts/asan_device_setup @@ -327,11 +327,6 @@ exec $_to \$@  EOF  } -# On Android-L not allowing user segv handler breaks some applications. -if [[ PRE_L -eq 0 ]]; then -    ASAN_OPTIONS="$ASAN_OPTIONS,allow_user_segv_handler=1" -fi -  if [[ x$extra_options != x ]] ; then      ASAN_OPTIONS="$ASAN_OPTIONS,$extra_options"  fi diff --git a/compiler-rt/lib/asan/tests/asan_test.cc b/compiler-rt/lib/asan/tests/asan_test.cc index 7ac72955f48..d0128e34de8 100644 --- a/compiler-rt/lib/asan/tests/asan_test.cc +++ b/compiler-rt/lib/asan/tests/asan_test.cc @@ -251,7 +251,8 @@ TEST(AddressSanitizer, BitFieldNegativeTest) {  namespace {  const char kSEGVCrash[] = "AddressSanitizer: SEGV on unknown address"; -const char kOverriddenHandler[] = "ASan signal handler has been overridden\n"; +const char kOverriddenSigactionHandler[] = "Test sigaction handler\n"; +const char kOverriddenSignalHandler[] = "Test signal handler\n";  TEST(AddressSanitizer, WildAddressTest) {    char *c = (char*)0x123; @@ -259,12 +260,12 @@ TEST(AddressSanitizer, WildAddressTest) {  }  void my_sigaction_sighandler(int, siginfo_t*, void*) { -  fprintf(stderr, kOverriddenHandler); +  fprintf(stderr, kOverriddenSigactionHandler);    exit(1);  }  void my_signal_sighandler(int signum) { -  fprintf(stderr, kOverriddenHandler); +  fprintf(stderr, kOverriddenSignalHandler);    exit(1);  } @@ -273,16 +274,20 @@ TEST(AddressSanitizer, SignalTest) {    memset(&sigact, 0, sizeof(sigact));    sigact.sa_sigaction = my_sigaction_sighandler;    sigact.sa_flags = SA_SIGINFO; -  // ASan should silently ignore sigaction()... +  char *c = (char *)0x123; + +  EXPECT_DEATH(*c = 0, kSEGVCrash); + +  // ASan should allow to set sigaction()...    EXPECT_EQ(0, sigaction(SIGSEGV, &sigact, 0));  #ifdef __APPLE__    EXPECT_EQ(0, sigaction(SIGBUS, &sigact, 0));  #endif -  char *c = (char*)0x123; -  EXPECT_DEATH(*c = 0, kSEGVCrash); +  EXPECT_DEATH(*c = 0, kOverriddenSigactionHandler); +    // ... and signal(). -  EXPECT_EQ(0, signal(SIGSEGV, my_signal_sighandler)); -  EXPECT_DEATH(*c = 0, kSEGVCrash); +  EXPECT_NE(SIG_ERR, signal(SIGSEGV, my_signal_sighandler)); +  EXPECT_DEATH(*c = 0, kOverriddenSignalHandler);  }  }  // namespace  #endif diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_flags.inc b/compiler-rt/lib/sanitizer_common/sanitizer_flags.inc index c5aaf411fcc..1972bdafdda 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_flags.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_flags.inc @@ -92,7 +92,7 @@ COMMON_FLAG(HandleSignalMode, handle_sigill, kHandleSignalNo,  COMMON_FLAG(HandleSignalMode, handle_sigfpe, kHandleSignalYes,              COMMON_FLAG_HANDLE_SIGNAL_HELP(SIGFPE))  #undef COMMON_FLAG_HANDLE_SIGNAL_HELP -COMMON_FLAG(bool, allow_user_segv_handler, false, +COMMON_FLAG(bool, allow_user_segv_handler, true,              "If set, allows user to register a SEGV handler even if the tool "              "registers one.")  COMMON_FLAG(bool, use_sigaltstack, true,  | 

