mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
task_struct: only use anon struct under randstruct plugin
commit 2cfe0d3009418a132b93d78642a8059a38fe5944 upstream. The original intent for always adding the anonymous struct in task_struct was to make sure we had compiler coverage. However, this caused pathological padding of 40 bytes at the start of task_struct. Instead, move the anonymous struct to being only used when struct layout randomization is enabled. Link: http://lkml.kernel.org/r/20180327213609.GA2964@beast Fixes: 29e48ce87f1e ("task_struct: Allow randomized") Signed-off-by: Kees Cook <keescook@chromium.org> Reported-by: Peter Zijlstra <peterz@infradead.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ingo Molnar <mingo@kernel.org> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
28cb085f15
commit
6337067b2a
@ -17,9 +17,6 @@
|
||||
*/
|
||||
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
|
||||
|
||||
#define randomized_struct_fields_start struct {
|
||||
#define randomized_struct_fields_end };
|
||||
|
||||
/* Clang doesn't have a way to turn it off per-function, yet. */
|
||||
#ifdef __noretpoline
|
||||
#undef __noretpoline
|
||||
|
@ -229,6 +229,9 @@
|
||||
#ifdef RANDSTRUCT_PLUGIN
|
||||
#define __randomize_layout __attribute__((randomize_layout))
|
||||
#define __no_randomize_layout __attribute__((no_randomize_layout))
|
||||
/* This anon struct can add padding, so only enable it under randstruct. */
|
||||
#define randomized_struct_fields_start struct {
|
||||
#define randomized_struct_fields_end } __randomize_layout;
|
||||
#endif
|
||||
|
||||
#endif /* GCC_VERSION >= 40500 */
|
||||
@ -243,15 +246,6 @@
|
||||
*/
|
||||
#define __visible __attribute__((externally_visible))
|
||||
|
||||
/*
|
||||
* RANDSTRUCT_PLUGIN wants to use an anonymous struct, but it is only
|
||||
* possible since GCC 4.6. To provide as much build testing coverage
|
||||
* as possible, this is used for all GCC 4.6+ builds, and not just on
|
||||
* RANDSTRUCT_PLUGIN builds.
|
||||
*/
|
||||
#define randomized_struct_fields_start struct {
|
||||
#define randomized_struct_fields_end } __randomize_layout;
|
||||
|
||||
#endif /* GCC_VERSION >= 40600 */
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user