Messages in this thread Patch in this message | | | Date | Mon, 2 Mar 2020 14:04:28 +0100 | Subject | [PATCH v2 1/3] compiler.h: define __no_initialize | From | glider@google ... |
| |
For CONFIG_INIT_STACK_ALL it's sometimes handy to disable force-initialization for a local variable, if it is known to be initialized later on before the first use. This can be done by using the __no_initialize macro.
__no_initialize should be applied carefully, as future changes to the code around the local variable may introduce paths on which the variable remains uninitialized before the use.
Signed-off-by: Alexander Potapenko <glider@google.com>
---
v2: - changed __do_not_initialize to __no_initialize as requested by Kees Cook --- include/linux/compiler-clang.h | 10 ++++++++++ include/linux/compiler_types.h | 4 ++++ 2 files changed, 14 insertions(+)
diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h index 333a6695a918c..27f774b27b061 100644 --- a/include/linux/compiler-clang.h +++ b/include/linux/compiler-clang.h @@ -24,6 +24,16 @@ #define __no_sanitize_address #endif +/* + * Disable initialization of a local variable when building with + * CONFIG_INIT_STACK_ALL. + */ +#ifdef CONFIG_INIT_STACK_ALL +#define __no_initialize __attribute__((uninitialized)) +#else +#define __no_initialize +#endif + /* * Not all versions of clang implement the the type-generic versions * of the builtin overflow checkers. Fortunately, clang implements diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h index 72393a8c1a6c5..0208699c855af 100644 --- a/include/linux/compiler_types.h +++ b/include/linux/compiler_types.h @@ -216,6 +216,10 @@ struct ftrace_likely_data { # define __no_fgcse #endif +#ifndef __no_initialize +#define __no_initialize +#endif + /* Are two types/vars the same type (ignoring qualifiers)? */ #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) -- 2.25.0.265.gbab2e86ba0-goog
| |