[RFC 00/12] Introduce struct layout randomization feature

Roman Lebedev via cfe-commits cfe-commits at lists.llvm.org
Sat Mar 9 01:59:24 PST 2019


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