[llvm] r212505 - [ASan] Completely remove sanitizer blacklist file from instrumentation pass.

Benjamin Kramer benny.kra at gmail.com
Tue Jul 8 01:19:32 PDT 2014


On Tue, Jul 8, 2014 at 2:50 AM, Alexey Samsonov <vonosmas at gmail.com> wrote:
> Author: samsonov
> Date: Mon Jul  7 19:50:49 2014
> New Revision: 212505
>
> URL: http://llvm.org/viewvc/llvm-project?rev=212505&view=rev
> Log:
> [ASan] Completely remove sanitizer blacklist file from instrumentation pass.

Can SpecialCaseList now move to Clang? It's a bit strange to have a
dependency from clangDriver to LLVMTransformUtils.

- Ben

>
> All blacklisting logic is now moved to the frontend (Clang).
> If a function (or source file it is in) is blacklisted, it doesn't
> get sanitize_address attribute and is therefore not instrumented.
> If a global variable (or source file it is in) is blacklisted, it is
> reported to be blacklisted by the entry in llvm.asan.globals metadata,
> and is not modified by the instrumentation.
>
> The latter may lead to certain false positives - not all the globals
> created by Clang are described in llvm.asan.globals metadata (e.g,
> RTTI descriptors are not), so we may start reporting errors on them
> even if "module" they appear in is blacklisted. We assume it's fine
> to take such risk:
>   1) errors on these globals are rare and usually indicate wild memory access
>   2) we can lazily add descriptors for these globals into llvm.asan.globals
>      lazily.
>
>
> Modified:
>     llvm/trunk/include/llvm/Transforms/Instrumentation.h
>     llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
>
> Modified: llvm/trunk/include/llvm/Transforms/Instrumentation.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Instrumentation.h?rev=212505&r1=212504&r2=212505&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Transforms/Instrumentation.h (original)
> +++ llvm/trunk/include/llvm/Transforms/Instrumentation.h Mon Jul  7 19:50:49 2014
> @@ -65,8 +65,7 @@ ModulePass *createGCOVProfilerPass(const
>
>  // Insert AddressSanitizer (address sanity checking) instrumentation
>  FunctionPass *createAddressSanitizerFunctionPass();
> -ModulePass *
> -createAddressSanitizerModulePass(StringRef BlacklistFile = StringRef());
> +ModulePass *createAddressSanitizerModulePass();
>
>  // Insert MemorySanitizer instrumentation (detection of uninitialized reads)
>  FunctionPass *createMemorySanitizerPass(int TrackOrigins = 0);
>
> Modified: llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp?rev=212505&r1=212504&r2=212505&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp (original)
> +++ llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp Mon Jul  7 19:50:49 2014
> @@ -45,7 +45,6 @@
>  #include "llvm/Transforms/Utils/Cloning.h"
>  #include "llvm/Transforms/Utils/Local.h"
>  #include "llvm/Transforms/Utils/ModuleUtils.h"
> -#include "llvm/Transforms/Utils/SpecialCaseList.h"
>  #include <algorithm>
>  #include <string>
>  #include <system_error>
> @@ -149,9 +148,6 @@ static cl::opt<bool> ClInvalidPointerPai
>  static cl::opt<unsigned> ClRealignStack("asan-realign-stack",
>         cl::desc("Realign stack to the value of this flag (power of two)"),
>         cl::Hidden, cl::init(32));
> -static cl::opt<std::string> ClBlacklistFile("asan-blacklist",
> -       cl::desc("File containing the list of objects to ignore "
> -                "during instrumentation"), cl::Hidden);
>  static cl::opt<int> ClInstrumentationWithCallsThreshold(
>      "asan-instrumentation-with-call-threshold",
>         cl::desc("If the function being instrumented contains more than "
> @@ -418,9 +414,7 @@ struct AddressSanitizer : public Functio
>
>  class AddressSanitizerModule : public ModulePass {
>   public:
> -  AddressSanitizerModule(StringRef BlacklistFile = StringRef())
> -      : ModulePass(ID), BlacklistFile(BlacklistFile.empty() ? ClBlacklistFile
> -                                                            : BlacklistFile) {}
> +  AddressSanitizerModule() : ModulePass(ID) {}
>    bool runOnModule(Module &M) override;
>    static char ID;  // Pass identification, replacement for typeid
>    const char *getPassName() const override {
> @@ -438,9 +432,6 @@ class AddressSanitizerModule : public Mo
>      return RedzoneSizeForScale(Mapping.Scale);
>    }
>
> -  SmallString<64> BlacklistFile;
> -
> -  std::unique_ptr<SpecialCaseList> BL;
>    GlobalsMetadata GlobalsMD;
>    Type *IntptrTy;
>    LLVMContext *C;
> @@ -601,8 +592,8 @@ char AddressSanitizerModule::ID = 0;
>  INITIALIZE_PASS(AddressSanitizerModule, "asan-module",
>      "AddressSanitizer: detects use-after-free and out-of-bounds bugs."
>      "ModulePass", false, false)
> -ModulePass *llvm::createAddressSanitizerModulePass(StringRef BlacklistFile) {
> -  return new AddressSanitizerModule(BlacklistFile);
> +ModulePass *llvm::createAddressSanitizerModulePass() {
> +  return new AddressSanitizerModule();
>  }
>
>  static size_t TypeSizeToSizeIndex(uint32_t TypeSize) {
> @@ -926,9 +917,6 @@ bool AddressSanitizerModule::ShouldInstr
>    Type *Ty = cast<PointerType>(G->getType())->getElementType();
>    DEBUG(dbgs() << "GLOBAL: " << *G << "\n");
>
> -  // FIXME: Don't use the blacklist here, all the data should be collected
> -  // by the frontend and passed in globals metadata.
> -  if (BL->isIn(*G)) return false;
>    if (GlobalsMD.isBlacklisted(G)) return false;
>    if (GlobalsMD.isSourceLocationGlobal(G)) return false;
>    if (!Ty->isSized()) return false;
> @@ -1163,7 +1151,6 @@ bool AddressSanitizerModule::runOnModule
>    if (!DLP)
>      return false;
>    DL = &DLP->getDataLayout();
> -  BL.reset(SpecialCaseList::createOrDie(BlacklistFile));
>    C = &(M.getContext());
>    int LongSize = DL->getPointerSizeInBits();
>    IntptrTy = Type::getIntNTy(*C, LongSize);
> @@ -1183,7 +1170,8 @@ bool AddressSanitizerModule::runOnModule
>      Changed = true;
>    }
>
> -  if (ClGlobals && !BL->isIn(M)) Changed |= InstrumentGlobals(IRB, M);
> +  if (ClGlobals)
> +    Changed |= InstrumentGlobals(IRB, M);
>
>    return Changed;
>  }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list