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@xxxxxxxxxx> --- 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 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel