| From b86729109c5fd0a480300f40608aac68764b5adf Mon Sep 17 00:00:00 2001 |
| From: Kees Cook <keescook@chromium.org> |
| Date: Mon, 5 Feb 2018 17:27:46 -0800 |
| Subject: gcc-plugins: Use dynamic initializers |
| |
| From: Kees Cook <keescook@chromium.org> |
| |
| commit b86729109c5fd0a480300f40608aac68764b5adf upstream. |
| |
| GCC 8 changed the order of some fields and is very picky about ordering |
| in static initializers, so instead just move to dynamic initializers, |
| and drop the redundant already-zero field assignments. |
| |
| Suggested-by: Valdis Kletnieks <valdis.kletnieks@vt.edu> |
| Signed-off-by: Kees Cook <keescook@chromium.org> |
| Cc: Lance Albertson <lance@osuosl.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| scripts/gcc-plugins/latent_entropy_plugin.c | 17 +---- |
| scripts/gcc-plugins/randomize_layout_plugin.c | 75 +++++++------------------- |
| scripts/gcc-plugins/structleak_plugin.c | 19 ++---- |
| 3 files changed, 33 insertions(+), 78 deletions(-) |
| |
| --- a/scripts/gcc-plugins/latent_entropy_plugin.c |
| +++ b/scripts/gcc-plugins/latent_entropy_plugin.c |
| @@ -255,21 +255,14 @@ static tree handle_latent_entropy_attrib |
| return NULL_TREE; |
| } |
| |
| -static struct attribute_spec latent_entropy_attr = { |
| - .name = "latent_entropy", |
| - .min_length = 0, |
| - .max_length = 0, |
| - .decl_required = true, |
| - .type_required = false, |
| - .function_type_required = false, |
| - .handler = handle_latent_entropy_attribute, |
| -#if BUILDING_GCC_VERSION >= 4007 |
| - .affects_type_identity = false |
| -#endif |
| -}; |
| +static struct attribute_spec latent_entropy_attr = { }; |
| |
| static void register_attributes(void *event_data __unused, void *data __unused) |
| { |
| + latent_entropy_attr.name = "latent_entropy"; |
| + latent_entropy_attr.decl_required = true; |
| + latent_entropy_attr.handler = handle_latent_entropy_attribute; |
| + |
| register_attribute(&latent_entropy_attr); |
| } |
| |
| --- a/scripts/gcc-plugins/randomize_layout_plugin.c |
| +++ b/scripts/gcc-plugins/randomize_layout_plugin.c |
| @@ -580,68 +580,35 @@ static void finish_type(void *event_data |
| return; |
| } |
| |
| -static struct attribute_spec randomize_layout_attr = { |
| - .name = "randomize_layout", |
| - // related to args |
| - .min_length = 0, |
| - .max_length = 0, |
| - .decl_required = false, |
| - // need type declaration |
| - .type_required = true, |
| - .function_type_required = false, |
| - .handler = handle_randomize_layout_attr, |
| -#if BUILDING_GCC_VERSION >= 4007 |
| - .affects_type_identity = true |
| -#endif |
| -}; |
| +static struct attribute_spec randomize_layout_attr = { }; |
| +static struct attribute_spec no_randomize_layout_attr = { }; |
| +static struct attribute_spec randomize_considered_attr = { }; |
| +static struct attribute_spec randomize_performed_attr = { }; |
| |
| -static struct attribute_spec no_randomize_layout_attr = { |
| - .name = "no_randomize_layout", |
| - // related to args |
| - .min_length = 0, |
| - .max_length = 0, |
| - .decl_required = false, |
| - // need type declaration |
| - .type_required = true, |
| - .function_type_required = false, |
| - .handler = handle_randomize_layout_attr, |
| +static void register_attributes(void *event_data, void *data) |
| +{ |
| + randomize_layout_attr.name = "randomize_layout"; |
| + randomize_layout_attr.type_required = true; |
| + randomize_layout_attr.handler = handle_randomize_layout_attr; |
| #if BUILDING_GCC_VERSION >= 4007 |
| - .affects_type_identity = true |
| + randomize_layout_attr.affects_type_identity = true; |
| #endif |
| -}; |
| |
| -static struct attribute_spec randomize_considered_attr = { |
| - .name = "randomize_considered", |
| - // related to args |
| - .min_length = 0, |
| - .max_length = 0, |
| - .decl_required = false, |
| - // need type declaration |
| - .type_required = true, |
| - .function_type_required = false, |
| - .handler = handle_randomize_considered_attr, |
| + no_randomize_layout_attr.name = "no_randomize_layout"; |
| + no_randomize_layout_attr.type_required = true; |
| + no_randomize_layout_attr.handler = handle_randomize_layout_attr; |
| #if BUILDING_GCC_VERSION >= 4007 |
| - .affects_type_identity = false |
| + no_randomize_layout_attr.affects_type_identity = true; |
| #endif |
| -}; |
| |
| -static struct attribute_spec randomize_performed_attr = { |
| - .name = "randomize_performed", |
| - // related to args |
| - .min_length = 0, |
| - .max_length = 0, |
| - .decl_required = false, |
| - // need type declaration |
| - .type_required = true, |
| - .function_type_required = false, |
| - .handler = handle_randomize_performed_attr, |
| -#if BUILDING_GCC_VERSION >= 4007 |
| - .affects_type_identity = false |
| -#endif |
| -}; |
| + randomize_considered_attr.name = "randomize_considered"; |
| + randomize_considered_attr.type_required = true; |
| + randomize_considered_attr.handler = handle_randomize_considered_attr; |
| + |
| + randomize_performed_attr.name = "randomize_performed"; |
| + randomize_performed_attr.type_required = true; |
| + randomize_performed_attr.handler = handle_randomize_performed_attr; |
| |
| -static void register_attributes(void *event_data, void *data) |
| -{ |
| register_attribute(&randomize_layout_attr); |
| register_attribute(&no_randomize_layout_attr); |
| register_attribute(&randomize_considered_attr); |
| --- a/scripts/gcc-plugins/structleak_plugin.c |
| +++ b/scripts/gcc-plugins/structleak_plugin.c |
| @@ -57,21 +57,16 @@ static tree handle_user_attribute(tree * |
| return NULL_TREE; |
| } |
| |
| -static struct attribute_spec user_attr = { |
| - .name = "user", |
| - .min_length = 0, |
| - .max_length = 0, |
| - .decl_required = false, |
| - .type_required = false, |
| - .function_type_required = false, |
| - .handler = handle_user_attribute, |
| -#if BUILDING_GCC_VERSION >= 4007 |
| - .affects_type_identity = true |
| -#endif |
| -}; |
| +static struct attribute_spec user_attr = { }; |
| |
| static void register_attributes(void *event_data, void *data) |
| { |
| + user_attr.name = "user"; |
| + user_attr.handler = handle_user_attribute; |
| +#if BUILDING_GCC_VERSION >= 4007 |
| + user_attr.affects_type_identity = true; |
| +#endif |
| + |
| register_attribute(&user_attr); |
| } |
| |