]> granicus.if.org Git - clang/commit
Insert poisoned paddings between fields in C++ classes so that AddressSanitizer can...
authorKostya Serebryany <kcc@google.com>
Thu, 16 Oct 2014 20:54:52 +0000 (20:54 +0000)
committerKostya Serebryany <kcc@google.com>
Thu, 16 Oct 2014 20:54:52 +0000 (20:54 +0000)
commit52c4fcf58da932fec911f275c1d4591dca2f69fc
tree98c3275d5be3a819fb6b63bec64ea8b2cd13a0b4
parent1bd711969ce910a6e63f24f617ce87b02afd448a
Insert poisoned paddings between fields in C++ classes so that AddressSanitizer can find intra-object-overflow bugs

Summary:
The general approach is to add extra paddings after every field
in AST/RecordLayoutBuilder.cpp, then add code to CTORs/DTORs that poisons the paddings
(CodeGen/CGClass.cpp).

Everything is done under the flag -fsanitize-address-field-padding.
The blacklist file (-fsanitize-blacklist) allows to avoid the transformation
for given classes or source files.

See also https://code.google.com/p/address-sanitizer/wiki/IntraObjectOverflow

Test Plan: run SPEC2006 and some of the Chromium tests with  -fsanitize-address-field-padding

Reviewers: samsonov, rnk, rsmith

Reviewed By: rsmith

Subscribers: majnemer, cfe-commits

Differential Revision: http://reviews.llvm.org/D5687

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@219961 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/AST/Decl.h
include/clang/Basic/DiagnosticFrontendKinds.td
include/clang/Basic/DiagnosticGroups.td
include/clang/Basic/SanitizerBlacklist.h
lib/AST/Decl.cpp
lib/AST/RecordLayoutBuilder.cpp
lib/Basic/SanitizerBlacklist.cpp
lib/CodeGen/CGClass.cpp
lib/CodeGen/CodeGenFunction.h
test/CodeGen/sanitize-address-field-padding.cpp [new file with mode: 0644]