diff options
author | Alexander Popov <alex.popov@linux.com> | 2018-08-16 18:16:58 -0400 |
---|---|---|
committer | Kees Cook <keescook@chromium.org> | 2018-09-04 13:35:47 -0400 |
commit | afaef01c001537fa97a25092d7f54d764dc7d8c1 (patch) | |
tree | 199a05427ea4c1e0c735058f322a5b21625b9ecd /scripts/gcc-plugins | |
parent | 57361846b52bc686112da6ca5368d11210796804 (diff) |
x86/entry: Add STACKLEAK erasing the kernel stack at the end of syscalls
The STACKLEAK feature (initially developed by PaX Team) has the following
benefits:
1. Reduces the information that can be revealed through kernel stack leak
bugs. The idea of erasing the thread stack at the end of syscalls is
similar to CONFIG_PAGE_POISONING and memzero_explicit() in kernel
crypto, which all comply with FDP_RIP.2 (Full Residual Information
Protection) of the Common Criteria standard.
2. Blocks some uninitialized stack variable attacks (e.g. CVE-2017-17712,
CVE-2010-2963). That kind of bugs should be killed by improving C
compilers in future, which might take a long time.
This commit introduces the code filling the used part of the kernel
stack with a poison value before returning to userspace. Full
STACKLEAK feature also contains the gcc plugin which comes in a
separate commit.
The STACKLEAK feature is ported from grsecurity/PaX. More information at:
https://grsecurity.net/
https://pax.grsecurity.net/
This code is modified from Brad Spengler/PaX Team's code in the last
public patch of grsecurity/PaX based on our understanding of the code.
Changes or omissions from the original code are ours and don't reflect
the original grsecurity/PaX code.
Performance impact:
Hardware: Intel Core i7-4770, 16 GB RAM
Test #1: building the Linux kernel on a single core
0.91% slowdown
Test #2: hackbench -s 4096 -l 2000 -g 15 -f 25 -P
4.2% slowdown
So the STACKLEAK description in Kconfig includes: "The tradeoff is the
performance impact: on a single CPU system kernel compilation sees a 1%
slowdown, other systems and workloads may vary and you are advised to
test this feature on your expected workload before deploying it".
Signed-off-by: Alexander Popov <alex.popov@linux.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Dave Hansen <dave.hansen@linux.intel.com>
Acked-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
Diffstat (limited to 'scripts/gcc-plugins')
-rw-r--r-- | scripts/gcc-plugins/Kconfig | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/scripts/gcc-plugins/Kconfig b/scripts/gcc-plugins/Kconfig index cb0c889e13aa..977b84e69787 100644 --- a/scripts/gcc-plugins/Kconfig +++ b/scripts/gcc-plugins/Kconfig | |||
@@ -139,4 +139,23 @@ config GCC_PLUGIN_RANDSTRUCT_PERFORMANCE | |||
139 | in structures. This reduces the performance hit of RANDSTRUCT | 139 | in structures. This reduces the performance hit of RANDSTRUCT |
140 | at the cost of weakened randomization. | 140 | at the cost of weakened randomization. |
141 | 141 | ||
142 | config GCC_PLUGIN_STACKLEAK | ||
143 | bool "Erase the kernel stack before returning from syscalls" | ||
144 | depends on GCC_PLUGINS | ||
145 | depends on HAVE_ARCH_STACKLEAK | ||
146 | help | ||
147 | This option makes the kernel erase the kernel stack before | ||
148 | returning from system calls. That reduces the information which | ||
149 | kernel stack leak bugs can reveal and blocks some uninitialized | ||
150 | stack variable attacks. | ||
151 | |||
152 | The tradeoff is the performance impact: on a single CPU system kernel | ||
153 | compilation sees a 1% slowdown, other systems and workloads may vary | ||
154 | and you are advised to test this feature on your expected workload | ||
155 | before deploying it. | ||
156 | |||
157 | This plugin was ported from grsecurity/PaX. More information at: | ||
158 | * https://grsecurity.net/ | ||
159 | * https://pax.grsecurity.net/ | ||
160 | |||
142 | endif | 161 | endif |