mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-16 05:16:07 +00:00

Summary: PR19838 When operator new[] is called and an array cookie is created we want asan to detect buffer overflow bugs that touch the cookie. For that we need to a) poison the shadow for the array cookie (call __asan_poison_cxx_array_cookie). b) ignore the legal accesses to the cookie generated by clang (add 'nosanitize' metadata) Reviewers: timurrrr, samsonov, rsmith Reviewed By: rsmith Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D4774 llvm-svn: 216434
53 lines
1.6 KiB
C++
53 lines
1.6 KiB
C++
//===--- SanitizerMetadata.h - Metadata for sanitizers ----------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Class which emits metadata consumed by sanitizer instrumentation passes.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#ifndef LLVM_CLANG_LIB_CODEGEN_SANITIZERMETADATA_H
|
|
#define LLVM_CLANG_LIB_CODEGEN_SANITIZERMETADATA_H
|
|
|
|
#include "clang/Basic/LLVM.h"
|
|
#include "clang/Basic/SourceLocation.h"
|
|
|
|
namespace llvm {
|
|
class GlobalVariable;
|
|
class Instruction;
|
|
class MDNode;
|
|
}
|
|
|
|
namespace clang {
|
|
class VarDecl;
|
|
|
|
namespace CodeGen {
|
|
|
|
class CodeGenModule;
|
|
|
|
class SanitizerMetadata {
|
|
SanitizerMetadata(const SanitizerMetadata &) LLVM_DELETED_FUNCTION;
|
|
void operator=(const SanitizerMetadata &) LLVM_DELETED_FUNCTION;
|
|
|
|
CodeGenModule &CGM;
|
|
public:
|
|
SanitizerMetadata(CodeGenModule &CGM);
|
|
void reportGlobalToASan(llvm::GlobalVariable *GV, const VarDecl &D,
|
|
bool IsDynInit = false);
|
|
void reportGlobalToASan(llvm::GlobalVariable *GV, SourceLocation Loc,
|
|
StringRef Name, bool IsDynInit = false,
|
|
bool IsBlacklisted = false);
|
|
void disableSanitizerForGlobal(llvm::GlobalVariable *GV);
|
|
void disableSanitizerForInstruction(llvm::Instruction *I);
|
|
private:
|
|
llvm::MDNode *getLocationMetadata(SourceLocation Loc);
|
|
};
|
|
} // end namespace CodeGen
|
|
} // end namespace clang
|
|
|
|
#endif
|