Skip to content

Commit

Permalink
Merge pull request llvm#151 from apple/cherry-pick-47891956
Browse files Browse the repository at this point in the history
[ASan] Make insertion of version mismatch guard configurable
  • Loading branch information
yln authored Nov 4, 2019
2 parents 0e5ae28 + dd21959 commit f1af536
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
8 changes: 7 additions & 1 deletion llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,11 @@ static cl::opt<bool> ClRecover(
cl::desc("Enable recovery mode (continue-after-error)."),
cl::Hidden, cl::init(false));

static cl::opt<bool> ClInsertVersionCheck(
"asan-guard-against-version-mismatch",
cl::desc("Guard against compiler/runtime version mismatch."),
cl::Hidden, cl::init(true));

// This flag may need to be replaced with -f[no-]asan-reads.
static cl::opt<bool> ClInstrumentReads("asan-instrument-reads",
cl::desc("instrument read instructions"),
Expand Down Expand Up @@ -2414,8 +2419,9 @@ bool ModuleAddressSanitizer::instrumentModule(Module &M) {

// Create a module constructor. A destructor is created lazily because not all
// platforms, and not all modules need it.
std::string AsanVersion = std::to_string(GetAsanVersion(M));
std::string VersionCheckName =
kAsanVersionCheckNamePrefix + std::to_string(GetAsanVersion(M));
ClInsertVersionCheck ? (kAsanVersionCheckNamePrefix + AsanVersion) : "";
std::tie(AsanCtorFunction, std::ignore) = createSanitizerCtorAndInitFunctions(
M, kAsanModuleCtorName, kAsanInitName, /*InitArgTypes=*/{},
/*InitArgs=*/{}, VersionCheckName);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
; Check that the ASan module constructor guards against compiler/runtime version
; mismatch.

; RUN: opt < %s -asan-module -S | FileCheck %s
; RUN: opt < %s -asan-module -asan-guard-against-version-mismatch=0 -S | FileCheck %s --check-prefix=NOGUARD

target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-unknown-linux-gnu"

; CHECK-LABEL: define internal void @asan.module_ctor()
; CHECK: call void @__asan_version_mismatch_check_
; NOGUARD-NOT: call void @__asan_version_mismatch_check_

0 comments on commit f1af536

Please sign in to comment.