[llvm-dev] [RFC] Using Intel MPX to harden SafeStack

Kostya Serebryany via llvm-dev llvm-dev at lists.llvm.org
Tue Mar 14 16:30:11 PDT 2017


FTR: https://peerj.com/preprints/2863/ seems to be related/similar to this
patch

On Fri, Feb 17, 2017 at 5:27 PM, LeMay, Michael <michael.lemay at intel.com>
wrote:

> On 2/7/2017 20:02, Kostya Serebryany wrote:
>
> ...
>
> My understanding is that BNDCU is the cheapest possible instruction, just
> like XOR or ADD,
> so the overhead should be relatively small.
> Still my guesstimate would be >= 5% since stores are very numerous.
> And such overhead will be on top of whatever overhead SafeStack has.
> Do you have any measurements to share?
>
> Here are estimated SPECint_base2006 component runtimes for some relevant
> test configurations:
>
>
>
> Runtime in seconds:
>
> +--------------+---------+---------+---------+-------+
>
> |Benchmark     |Unpatched|Unpatched|Patched  |MPX    |
>
> |              |Base     |SafeStack|SafeStack|       |
>
> +--------------+---------+---------+---------+-------+
>
> |400.perlbench |430.82   |443.07   |442.42   |456.34 |
>
> +--------------+---------+---------+---------+-------+
>
> |401.bzip2     |711.43   |716.59   |717.35   |750.06 |
>
> +--------------+---------+---------+---------+-------+
>
> |403.gcc       |333.76   |334.11   |334.95   |336.13 |
>
> +--------------+---------+---------+---------+-------+
>
> |429.mcf       |371.48   |375.75   |373.50   |377.93 |
>
> +--------------+---------+---------+---------+-------+
>
> |445.gobmk     |677.80   |686.12   |685.50   |702.87 |
>
> +--------------+---------+---------+---------+-------+
>
> |456.hmmer     |534.94   |533.68   |534.37   |553.40 |
>
> +--------------+---------+---------+---------+-------+
>
> |458.sjeng     |633.69   |641.21   |641.81   |655.94 |
>
> +--------------+---------+---------+---------+-------+
>
> |462.libquantum|362.82   |367.00   |367.38   |382.14 |
>
> +--------------+---------+---------+---------+-------+
>
> |464.h264ref   |701.37   |682.13   |683.41   |699.93 |
>
> +--------------+---------+---------+---------+-------+
>
> |471.omnetpp   |397.04   |407.38   |407.33   |411.36 |
>
> +--------------+---------+---------+---------+-------+
>
> |473.astar     |611.51   |610.46   |610.19   |624.78 |
>
> +--------------+---------+---------+---------+-------+
>
> |483.xalancbmk |291.66   |295.61   |296.42   |298.29 |
>
> +--------------+---------+---------+---------+-------+
>
> |SUM           |6058.32  |6093.10  |6094.62  |6249.16|
>
> +--------------+---------+---------+---------+-------+
>
>
> These runtimes are estimates as benchmark runs for research purposes built
> with patched/experimental compilers cannot be benchmark compliant.
> Compilation flags that aren't yet fully documented also can not be
> compliant.
>
>
> Percentage changes in runtime relative to Unpatched Base:
>
> +--------------+---------+---------+-----+
>
> |Benchmark     |Unpatched|Patched  |MPX  |
>
> |              |SafeStack|SafeStack|     |
>
> +--------------+---------+---------+-----+
>
> |400.perlbench |2.84     |2.69     |5.93 |
>
> +--------------+---------+---------+-----+
>
> |401.bzip2     |0.73     |0.83     |5.43 |
>
> +--------------+---------+---------+-----+
>
> |403.gcc       |0.10     |0.36     |0.71 |
>
> +--------------+---------+---------+-----+
>
> |429.mcf       |1.15     |0.54     |1.74 |
>
> +--------------+---------+---------+-----+
>
> |445.gobmk     |1.23     |1.14     |3.70 |
>
> +--------------+---------+---------+-----+
>
> |456.hmmer     |-0.24    |-0.11    |3.45 |
>
> +--------------+---------+---------+-----+
>
> |458.sjeng     |1.19     |1.28     |3.51 |
>
> +--------------+---------+---------+-----+
>
> |462.libquantum|1.15     |1.26     |5.32 |
>
> +--------------+---------+---------+-----+
>
> |464.h264ref   |-2.74    |-2.56    |-0.21|
>
> +--------------+---------+---------+-----+
>
> |471.omnetpp   |2.60     |2.59     |3.61 |
>
> +--------------+---------+---------+-----+
>
> |473.astar     |-0.17    |-0.21    |2.17 |
>
> +--------------+---------+---------+-----+
>
> |483.xalancbmk |1.35     |1.63     |2.27 |
>
> +--------------+---------+---------+-----+
>
> |SUM           |0.57     |0.60     |3.15 |
>
> +--------------+---------+---------+-----+
>
>
> These measurements were collected on an Intel NUC6i5SY with an Intel Core
> i5-6260U CPU and 32G RAM running Clear Linux 13330.  Intel Hyper-Threading,
> Intel Turbo Boost, and the LAN were all disabled.  I used SPEC CPU2006 v1.2
> and started the Clang/LLVM port from the gcc 4.6 Linux x86 example file
> included in the SPEC CPU 2006 kit.
>
>
> Here is the legend for the various test configurations:
>
>  - Unpatched Base: Unpatched compiler with SafeStack disabled.  This is
> the reference configuration.
>
>  - Unpatched SafeStack: Unpatched compiler with SafeStack enabled.
>
>  - Patched SafeStack: Patched compiler with SafeStack enabled.  However,
> MPX-based hardening is not enabled in this configuration.  This
> configuration is intended to show the effect of the Compiler-RT patches on
> programs that do not enable MPX-based hardening.
>
>  - MPX: Patched compiler with MPX-hardened SafeStack enabled.
>
>
>
> The unpatched compiler was built from the following SVN IDs:
>
>  - LLVM: 292171 from January 16, 2017
>
>  - Clang: 292141 from January 16, 2017
>
>  - Compiler-RT: 291346 from January 7, 2017
>
>
>
> The patched compiler was built with the current posted versions of my
> patches applied on top of the SVN IDs listed above.
>
>
>
> The following compiler settings in the SPEC CPU2006 cfg files were used
> for each configuration:
>
>
>
> COPTIMIZE:
>
>  - Unpatched Base: -std=gnu89 -O2 -fno-strict-aliasing -march=skylake
> -mtune=skylake
>
>  - Unpatched/Patched SafeStack: -std=gnu89 -O2 -fno-strict-aliasing
> -march=skylake -mtune=skylake -fsanitize=safe-stack
>
>  - MPX: -std=gnu89 -O2 -fno-strict-aliasing -march=skylake -mtune=skylake
> -mseparate-stack-seg -fsanitize=safe-stack
>
>
>
> CXXOPTIMIZE:
>
>  - Unpatched Base: -O2 -fno-strict-aliasing -march=skylake -mtune=skylake
>
>  - Unpatched/Patched SafeStack: -O2 -fno-strict-aliasing -march=skylake
> -mtune=skylake -fsanitize=safe-stack
>
>  - MPX: -O2 -fno-strict-aliasing -march=skylake -mtune=skylake
> -mseparate-stack-seg -fsanitize=safe-stack
>
>
> The FOPTIMIZE settings are irrelevant, since none of the SPECint tests use
> Fortran.
>
>
> Here are measurements of the absolute sizes of the .text sections for the
> programs as well as percentage changes in those sizes:
>
>
>
> .text section size in bytes:
>
> +--------------+---------+---------+---------+-------+
>
> |Benchmark     |Unpatched|Unpatched|Patched  |MPX    |
>
> |              |Base     |SafeStack|SafeStack|       |
>
> +--------------+---------+---------+---------+-------+
>
> |400.perlbench |884769   |1003041  |1003233  |1131769|
>
> +--------------+---------+---------+---------+-------+
>
> |401.bzip2     |79393    |175297   |175489   |235577 |
>
> +--------------+---------+---------+---------+-------+
>
> |403.gcc       |2420209  |2545041  |2545233  |2727913|
>
> +--------------+---------+---------+---------+-------+
>
> |429.mcf       |10977    |105345   |105537   |155705 |
>
> +--------------+---------+---------+---------+-------+
>
> |445.gobmk     |633953   |743585   |743777   |823993 |
>
> +--------------+---------+---------+---------+-------+
>
> |456.hmmer     |258593   |358033   |358225   |432249 |
>
> +--------------+---------+---------+---------+-------+
>
> |458.sjeng     |96593    |192929   |193121   |251545 |
>
> +--------------+---------+---------+---------+-------+
>
> |462.libquantum|32441    |127065   |127257   |177545 |
>
> +--------------+---------+---------+---------+-------+
>
> |464.h264ref   |539713   |638705   |638897   |736729 |
>
> +--------------+---------+---------+---------+-------+
>
> |471.omnetpp   |403521   |527345   |527537   |597801 |
>
> +--------------+---------+---------+---------+-------+
>
> |473.astar     |31169    |126225   |126417   |178105 |
>
> +--------------+---------+---------+---------+-------+
>
> |483.xalancbmk |2358241  |2725921  |2726113  |2936841|
>
> +--------------+---------+---------+---------+-------+
>
>
>
> Percentage changes in .text section size relative to Unpatched Base:
>
>
> +--------------+---------+---------+-------+
>
> |Benchmark     |Unpatched|Patched  |MPX    |
>
> |              |SafeStack|SafeStack|       |
>
> +--------------+---------+---------+-------+
>
> |400.perlbench |13.37    |13.39    |27.92  |
>
> +--------------+---------+---------+-------+
>
> |401.bzip2     |120.80   |121.04   |196.72 |
>
> +--------------+---------+---------+-------+
>
> |403.gcc       |5.16     |5.17     |12.71  |
>
> +--------------+---------+---------+-------+
>
> |429.mcf       |859.69   |861.44   |1318.47|
>
> +--------------+---------+---------+-------+
>
> |445.gobmk     |17.29    |17.32    |29.98  |
>
> +--------------+---------+---------+-------+
>
> |456.hmmer     |38.45    |38.53    |67.15  |
>
> +--------------+---------+---------+-------+
>
> |458.sjeng     |99.73    |99.93    |160.42 |
>
> +--------------+---------+---------+-------+
>
> |462.libquantum|291.68   |292.27   |447.29 |
>
> +--------------+---------+---------+-------+
>
> |464.h264ref   |18.34    |18.38    |36.50  |
>
> +--------------+---------+---------+-------+
>
> |471.omnetpp   |30.69    |30.73    |48.15  |
>
> +--------------+---------+---------+-------+
>
> |473.astar     |304.97   |305.59   |471.42 |
>
> +--------------+---------+---------+-------+
>
> |483.xalancbmk |15.59    |15.60    |24.54  |
>
> +--------------+---------+---------+-------+
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170314/e2db3fa4/attachment.html>


More information about the llvm-dev mailing list