[RFC 00/12] Introduce struct layout randomization feature
Connor Kuehl via cfe-commits
cfe-commits at lists.llvm.org
Tue Mar 12 08:14:09 PDT 2019
Thank you for the heads up! I put the patchset on Phabricator and sent
the RFC out to the cfe-dev mailing list.
On 3/9/19 1:59 AM, Roman Lebedev wrote:
> You probably want to submit this patchset to phabricator.
> It will get lost in mailing list.
>
> On Sat, Mar 9, 2019 at 1:38 AM Connor Kuehl via cfe-commits
> <cfe-commits at lists.llvm.org> wrote:
>> This patch set introduces structure field layout randomization into the Clang
>> compiler. The Randstruct feature is a compile-time hardening technique that
>> randomizes the field layout for designated structures of a code base.
>> Admittedly, this is mostly useful for closed-source releases of code (since
>> the randomization seed would be available for public and open source application
>> s). However, this patch set also enhances Clang’s feature parity with that
>> of GCC which already has the Randstruct feature.
>>
>> This patch set is a from-scratch reimplementation of the Randstruct feature
>> that was originally ported to GCC. The patches for this implementation in GCC
>> can be found here:
>>
>> https://www.openwall.com/lists/kernel-hardening/2017/04/06/14.
>>
>> This feature identifies structures for randomization in two ways. The first
>> method targets structures that are manually marked with the new
>> “randomize_layout” attribute. The second is an optional feature that will
>> automatically select and randomize structures that are found to consist entirely
>> of function pointers. This automatic selection feature can be extended to
>> include other vulnerable structure types that are safe to randomize as they are
>> identified. You can also opt a specific structure out of this feature with the
>> “no_randomize_layout” attribute. Automatic structure selection is enabled with
>> the “-randstruct-auto” compiler flag. By default, Randstruct seeds on the empty
>> string, but a seed can be supplied with the “-randstruct-seed=” command line
>> argument.
>>
>> This entire patch set is the sum total of an undergraduate computer science
>> capstone team’s effort.
>>
>> Portland State University Clang Randstruct Capstone Team (Fall 2018-Winter 2019):
>>
>> Co-authored-by: Cole Nixon <nixontcole at gmail.com>
>> Co-authored-by: Connor Kuehl <cipkuehl at gmail.com>
>> Co-authored-by: James Foster <jafosterja at gmail.com>
>> Co-authored-by: Jeff Takahashi <jeffrey.takahashi at gmail.com>
>> Co-authored-by: Jordan Cantrell <jordan.cantrell at mail.com>
>> Co-authored-by: Nikk Forbus <nicholas.forbus at gmail.com>
>> Co-authored-by: Tim Pugh <nwtpugh at gmail.com>
>>
>> Connor Kuehl (12):
>> Add documentation for randstruct attributes
>> Add randomize_layout attribute and handler
>> Add no_randomize_layout attribute and handler
>> Add randomize_layout warning for unions
>> Add warning for mutually exclusive attributes
>> Add globals to store command line arguments in
>> Add randstruct-seed compiler argument
>> Add automatic structure selection compiler switch
>> Implement record field randomization algorithms
>> Fix: Set tail pointer to null in field list
>> Forward declare RecordFieldReorganizer
>> Wire up Randstruct; intercept and randomize
>>
>> clang/include/clang/AST/Decl.h | 1 +
>> clang/include/clang/AST/DeclBase.h | 2 +
>> clang/include/clang/AST/RandstructSeed.h | 8 +
>> .../clang/AST/RecordFieldReorganizer.h | 59 ++++
>> clang/include/clang/Basic/Attr.td | 14 +
>> clang/include/clang/Basic/AttrDocs.td | 45 +++
>> .../include/clang/Basic/DiagnosticASTKinds.td | 5 +
>> clang/include/clang/Driver/CC1Options.td | 2 +
>> clang/include/clang/Driver/Options.td | 4 +
>> clang/lib/AST/CMakeLists.txt | 1 +
>> clang/lib/AST/DeclBase.cpp | 3 +
>> clang/lib/AST/RecordFieldReorganizer.cpp | 257 ++++++++++++++++++
>> clang/lib/AST/RecordLayoutBuilder.cpp | 20 ++
>> clang/lib/Driver/ToolChains/Clang.cpp | 10 +
>> clang/lib/Frontend/CompilerInvocation.cpp | 8 +
>> clang/lib/Sema/SemaDeclAttr.cpp | 6 +
>> ...a-attribute-supported-attributes-list.test | 2 +
>> 17 files changed, 447 insertions(+)
>> create mode 100644 clang/include/clang/AST/RandstructSeed.h
>> create mode 100644 clang/include/clang/AST/RecordFieldReorganizer.h
>> create mode 100644 clang/lib/AST/RecordFieldReorganizer.cpp
>>
>> --
>> 2.17.1
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list