forked from mirrors/linux
		
	 2cfe0d3009
			
		
	
	
		2cfe0d3009
		
	
	
	
	
		
			
			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: 29e48ce87f ("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>
		
	
			
		
			
				
	
	
		
			31 lines
		
	
	
	
		
			910 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
	
		
			910 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0 */
 | |
| #ifndef __LINUX_COMPILER_TYPES_H
 | |
| #error "Please don't include <linux/compiler-clang.h> directly, include <linux/compiler.h> instead."
 | |
| #endif
 | |
| 
 | |
| /* Some compiler specific definitions are overwritten here
 | |
|  * for Clang compiler
 | |
|  */
 | |
| 
 | |
| #ifdef uninitialized_var
 | |
| #undef uninitialized_var
 | |
| #define uninitialized_var(x) x = *(&(x))
 | |
| #endif
 | |
| 
 | |
| /* same as gcc, this was present in clang-2.6 so we can assume it works
 | |
|  * with any version that can compile the kernel
 | |
|  */
 | |
| #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
 | |
| 
 | |
| /* all clang versions usable with the kernel support KASAN ABI version 5 */
 | |
| #define KASAN_ABI_VERSION 5
 | |
| 
 | |
| /* emulate gcc's __SANITIZE_ADDRESS__ flag */
 | |
| #if __has_feature(address_sanitizer)
 | |
| #define __SANITIZE_ADDRESS__
 | |
| #endif
 | |
| 
 | |
| /* Clang doesn't have a way to turn it off per-function, yet. */
 | |
| #ifdef __noretpoline
 | |
| #undef __noretpoline
 | |
| #endif
 |