From ac644fa9173cb90a6f7328f5f508974631824c38 Mon Sep 17 00:00:00 2001 From: Vitaly Buka Date: Mon, 29 Aug 2016 17:16:59 +0000 Subject: [PATCH] [asan] Remove runtime flag detect_stack_use_after_scope Summary: We are going to use store instructions to poison some allocas. Runtime flag will require branching in instrumented code on every lifetime intrinsic. We'd like to avoid that. Reviewers: eugenis Subscribers: llvm-commits, kubabrecka Differential Revision: https://reviews.llvm.org/D23967 llvm-svn: 279981 --- compiler-rt/lib/asan/asan_flags.inc | 2 -- compiler-rt/lib/asan/asan_interface_internal.h | 4 ---- compiler-rt/lib/asan/asan_poisoning.cc | 2 -- compiler-rt/lib/asan/asan_rtl.cc | 4 ---- compiler-rt/lib/asan/asan_win.cc | 6 ------ compiler-rt/lib/asan/asan_win_dll_thunk.cc | 4 ---- .../lib/asan/asan_win_dynamic_runtime_thunk.cc | 18 ---------------- .../test/asan/TestCases/use-after-scope-types.cc | 24 ++++++++++------------ compiler-rt/test/asan/TestCases/use-after-scope.cc | 4 +--- 9 files changed, 12 insertions(+), 56 deletions(-) diff --git a/compiler-rt/lib/asan/asan_flags.inc b/compiler-rt/lib/asan/asan_flags.inc index 805002a..9496a47 100644 --- a/compiler-rt/lib/asan/asan_flags.inc +++ b/compiler-rt/lib/asan/asan_flags.inc @@ -46,8 +46,6 @@ ASAN_FLAG(bool, replace_intrin, true, "If set, uses custom wrappers for memset/memcpy/memmove intrinsics.") ASAN_FLAG(bool, detect_stack_use_after_return, false, "Enables stack-use-after-return checking at run-time.") -ASAN_FLAG(bool, detect_stack_use_after_scope, true, - "Enables stack-use-after-scope checking at run-time.") ASAN_FLAG(int, min_uar_stack_size_log, 16, // We can't do smaller anyway. "Minimum fake stack size log.") ASAN_FLAG(int, max_uar_stack_size_log, diff --git a/compiler-rt/lib/asan/asan_interface_internal.h b/compiler-rt/lib/asan/asan_interface_internal.h index 9462a8c..6f75bb6 100644 --- a/compiler-rt/lib/asan/asan_interface_internal.h +++ b/compiler-rt/lib/asan/asan_interface_internal.h @@ -174,10 +174,6 @@ extern "C" { SANITIZER_INTERFACE_ATTRIBUTE extern int __asan_option_detect_stack_use_after_return; -// Global flag, copy of ASAN_OPTIONS=detect_stack_use_after_scope - SANITIZER_INTERFACE_ATTRIBUTE - extern int __asan_option_detect_stack_use_after_scope; - SANITIZER_INTERFACE_ATTRIBUTE extern uptr *__asan_test_only_reported_buggy_pointer; diff --git a/compiler-rt/lib/asan/asan_poisoning.cc b/compiler-rt/lib/asan/asan_poisoning.cc index dafd06a..e6487a0 100644 --- a/compiler-rt/lib/asan/asan_poisoning.cc +++ b/compiler-rt/lib/asan/asan_poisoning.cc @@ -339,13 +339,11 @@ void __asan_set_shadow_f8(uptr addr, uptr size) { } void __asan_poison_stack_memory(uptr addr, uptr size) { - if (!__asan_option_detect_stack_use_after_scope) return; VReport(1, "poisoning: %p %zx\n", (void *)addr, size); PoisonAlignedStackMemory(addr, size, true); } void __asan_unpoison_stack_memory(uptr addr, uptr size) { - if (!__asan_option_detect_stack_use_after_scope) return; VReport(1, "unpoisoning: %p %zx\n", (void *)addr, size); PoisonAlignedStackMemory(addr, size, false); } diff --git a/compiler-rt/lib/asan/asan_rtl.cc b/compiler-rt/lib/asan/asan_rtl.cc index a4f82bf..5a1128d 100644 --- a/compiler-rt/lib/asan/asan_rtl.cc +++ b/compiler-rt/lib/asan/asan_rtl.cc @@ -33,7 +33,6 @@ #include "ubsan/ubsan_platform.h" int __asan_option_detect_stack_use_after_return; // Global interface symbol. -int __asan_option_detect_stack_use_after_scope; // Global interface symbol. uptr *__asan_test_only_reported_buggy_pointer; // Used only for testing asan. namespace __asan { @@ -446,9 +445,6 @@ static void AsanInitInternal() { __asan_option_detect_stack_use_after_return = flags()->detect_stack_use_after_return; - __asan_option_detect_stack_use_after_scope = - flags()->detect_stack_use_after_scope; - // Re-exec ourselves if we need to set additional env or command line args. MaybeReexec(); diff --git a/compiler-rt/lib/asan/asan_win.cc b/compiler-rt/lib/asan/asan_win.cc index 0616e40..5b29aec 100644 --- a/compiler-rt/lib/asan/asan_win.cc +++ b/compiler-rt/lib/asan/asan_win.cc @@ -37,12 +37,6 @@ int __asan_should_detect_stack_use_after_return() { return __asan_option_detect_stack_use_after_return; } -SANITIZER_INTERFACE_ATTRIBUTE -int __asan_should_detect_stack_use_after_scope() { - __asan_init(); - return __asan_option_detect_stack_use_after_scope; -} - // -------------------- A workaround for the absence of weak symbols ----- {{{ // We don't have a direct equivalent of weak symbols when using MSVC, but we can // use the /alternatename directive to tell the linker to default a specific diff --git a/compiler-rt/lib/asan/asan_win_dll_thunk.cc b/compiler-rt/lib/asan/asan_win_dll_thunk.cc index 4316415..77efbdb 100644 --- a/compiler-rt/lib/asan/asan_win_dll_thunk.cc +++ b/compiler-rt/lib/asan/asan_win_dll_thunk.cc @@ -198,11 +198,9 @@ static void InterceptHooks(); // Don't use the INTERFACE_FUNCTION machinery for this function as we actually // want to call it in the __asan_init interceptor. WRAP_W_V(__asan_should_detect_stack_use_after_return) -WRAP_W_V(__asan_should_detect_stack_use_after_scope) extern "C" { int __asan_option_detect_stack_use_after_return; - int __asan_option_detect_stack_use_after_scope; // Manually wrap __asan_init as we need to initialize // __asan_option_detect_stack_use_after_return afterwards. @@ -216,8 +214,6 @@ extern "C" { fn(); __asan_option_detect_stack_use_after_return = (__asan_should_detect_stack_use_after_return() != 0); - __asan_option_detect_stack_use_after_scope = - (__asan_should_detect_stack_use_after_scope() != 0); InterceptHooks(); } diff --git a/compiler-rt/lib/asan/asan_win_dynamic_runtime_thunk.cc b/compiler-rt/lib/asan/asan_win_dynamic_runtime_thunk.cc index c790714..c6e2a65 100644 --- a/compiler-rt/lib/asan/asan_win_dynamic_runtime_thunk.cc +++ b/compiler-rt/lib/asan/asan_win_dynamic_runtime_thunk.cc @@ -15,7 +15,6 @@ // // This includes: // - forwarding the detect_stack_use_after_return runtime option -// - forwarding the detect_stack_use_after_scope runtime option // - working around deficiencies of the MD runtime // - installing a custom SEH handler // @@ -52,23 +51,6 @@ int __asan_option_detect_stack_use_after_return = } //////////////////////////////////////////////////////////////////////////////// -// Define a copy of __asan_option_detect_stack_use_after_scope that should be -// used when linking an MD runtime with a set of object files on Windows. -// -// The ASan MD runtime dllexports '__asan_option_detect_stack_use_after_scope', -// so normally we would just dllimport it. Unfortunately, the dllimport -// attribute adds __imp_ prefix to the symbol name of a variable. -// Since in general we don't know if a given TU is going to be used -// with a MT or MD runtime and we don't want to use ugly __imp_ names on Windows -// just to work around this issue, let's clone the variable that is constant -// after initialization anyways. -extern "C" { -__declspec(dllimport) int __asan_should_detect_stack_use_after_scope(); -int __asan_option_detect_stack_use_after_scope = - __asan_should_detect_stack_use_after_scope(); -} - -//////////////////////////////////////////////////////////////////////////////// // For some reason, the MD CRT doesn't call the C/C++ terminators during on DLL // unload or on exit. ASan relies on LLVM global_dtors to call // __asan_unregister_globals on these events, which unfortunately doesn't work diff --git a/compiler-rt/test/asan/TestCases/use-after-scope-types.cc b/compiler-rt/test/asan/TestCases/use-after-scope-types.cc index b213681..53ae340 100644 --- a/compiler-rt/test/asan/TestCases/use-after-scope-types.cc +++ b/compiler-rt/test/asan/TestCases/use-after-scope-types.cc @@ -1,17 +1,15 @@ // RUN: %clangxx_asan %stdcxx11 -O0 -fsanitize-address-use-after-scope %s -o %t -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 0 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 1 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 2 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 3 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 4 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 5 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 6 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 7 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 8 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 9 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 10 2>&1 | FileCheck %s - -// RUN: %env_asan_opts=detect_stack_use_after_scope=0 %run %t 11 +// RUN: not %run %t 0 2>&1 | FileCheck %s +// RUN: not %run %t 1 2>&1 | FileCheck %s +// RUN: not %run %t 2 2>&1 | FileCheck %s +// RUN: not %run %t 3 2>&1 | FileCheck %s +// RUN: not %run %t 4 2>&1 | FileCheck %s +// RUN: not %run %t 5 2>&1 | FileCheck %s +// RUN: not %run %t 6 2>&1 | FileCheck %s +// RUN: not %run %t 7 2>&1 | FileCheck %s +// RUN: not %run %t 8 2>&1 | FileCheck %s +// RUN: not %run %t 9 2>&1 | FileCheck %s +// RUN: not %run %t 10 2>&1 | FileCheck %s #include #include diff --git a/compiler-rt/test/asan/TestCases/use-after-scope.cc b/compiler-rt/test/asan/TestCases/use-after-scope.cc index f669bf9..d92dae6 100644 --- a/compiler-rt/test/asan/TestCases/use-after-scope.cc +++ b/compiler-rt/test/asan/TestCases/use-after-scope.cc @@ -1,7 +1,5 @@ // RUN: %clangxx_asan -O1 -fsanitize-address-use-after-scope %s -o %t && \ -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 2>&1 | FileCheck %s - -// RUN: %env_asan_opts=detect_stack_use_after_scope=0 %run %t +// RUN: not %run %t 2>&1 | FileCheck %s volatile int *p = 0; -- 2.7.4