[PATCH] D57633: [SanitizerCoverage] Clang crashes if user declares `__sancov_lowest_stack` variable

Julian Lettner via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 4 14:06:33 PST 2019


This revision was automatically updated to reflect the committed changes.
Closed by commit rL353100: [SanitizerCoverage] Clang crashes if user declares `__sancov_lowest_stack`… (authored by yln, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D57633?vs=184877&id=185154#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D57633/new/

https://reviews.llvm.org/D57633

Files:
  llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
  llvm/trunk/test/Instrumentation/SanitizerCoverage/stack-depth-variable-declared-by-user.ll


Index: llvm/trunk/test/Instrumentation/SanitizerCoverage/stack-depth-variable-declared-by-user.ll
===================================================================
--- llvm/trunk/test/Instrumentation/SanitizerCoverage/stack-depth-variable-declared-by-user.ll
+++ llvm/trunk/test/Instrumentation/SanitizerCoverage/stack-depth-variable-declared-by-user.ll
@@ -0,0 +1,12 @@
+; Ensure that we terminate with a useful error message (instead of crash) if the
+; user declares `__sancov_lowest_stack` with an unexpected type.
+; RUN: not opt < %s -sancov -sanitizer-coverage-level=1 \
+; RUN:         -sanitizer-coverage-stack-depth -S 2>&1 | FileCheck %s
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+; Wrong type: i32 instead of expected i64
+ at __sancov_lowest_stack = thread_local global i32 0
+
+; CHECK: error: '__sancov_lowest_stack' should not be declared by the user
Index: llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
===================================================================
--- llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
+++ llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
@@ -377,7 +377,12 @@
 
   Constant *SanCovLowestStackConstant =
       M.getOrInsertGlobal(SanCovLowestStackName, IntptrTy);
-  SanCovLowestStack = cast<GlobalVariable>(SanCovLowestStackConstant);
+  SanCovLowestStack = dyn_cast<GlobalVariable>(SanCovLowestStackConstant);
+  if (!SanCovLowestStack) {
+    C->emitError(StringRef("'") + SanCovLowestStackName +
+                 "' should not be declared by the user");
+    return true;
+  }
   SanCovLowestStack->setThreadLocalMode(
       GlobalValue::ThreadLocalMode::InitialExecTLSModel);
   if (Options.StackDepth && !SanCovLowestStack->isDeclaration())


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D57633.185154.patch
Type: text/x-patch
Size: 1818 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190204/896fa173/attachment.bin>


More information about the llvm-commits mailing list