| From f9398f15605a50110bf570aaa361163a85113dd1 Mon Sep 17 00:00:00 2001 |
| From: Kees Cook <keescook@chromium.org> |
| Date: Fri, 23 Jul 2021 15:19:31 -0700 |
| Subject: lib/test_stackinit: Fix static initializer test |
| |
| From: Kees Cook <keescook@chromium.org> |
| |
| commit f9398f15605a50110bf570aaa361163a85113dd1 upstream. |
| |
| The static initializer test got accidentally converted to a dynamic |
| initializer. Fix this and retain the giant padding hole without using |
| an aligned struct member. |
| |
| Fixes: 50ceaa95ea09 ("lib: Introduce test_stackinit module") |
| Cc: Ard Biesheuvel <ardb@kernel.org> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Kees Cook <keescook@chromium.org> |
| Link: https://lore.kernel.org/r/20210723221933.3431999-2-keescook@chromium.org |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| lib/test_stackinit.c | 20 +++++++------------- |
| 1 file changed, 7 insertions(+), 13 deletions(-) |
| |
| --- a/lib/test_stackinit.c |
| +++ b/lib/test_stackinit.c |
| @@ -67,10 +67,10 @@ static bool range_contains(char *haystac |
| #define INIT_STRUCT_none /**/ |
| #define INIT_STRUCT_zero = { } |
| #define INIT_STRUCT_static_partial = { .two = 0, } |
| -#define INIT_STRUCT_static_all = { .one = arg->one, \ |
| - .two = arg->two, \ |
| - .three = arg->three, \ |
| - .four = arg->four, \ |
| +#define INIT_STRUCT_static_all = { .one = 0, \ |
| + .two = 0, \ |
| + .three = 0, \ |
| + .four = 0, \ |
| } |
| #define INIT_STRUCT_dynamic_partial = { .two = arg->two, } |
| #define INIT_STRUCT_dynamic_all = { .one = arg->one, \ |
| @@ -84,8 +84,7 @@ static bool range_contains(char *haystac |
| var.one = 0; \ |
| var.two = 0; \ |
| var.three = 0; \ |
| - memset(&var.four, 0, \ |
| - sizeof(var.four)) |
| + var.four = 0 |
| |
| /* |
| * @name: unique string name for the test |
| @@ -210,18 +209,13 @@ struct test_small_hole { |
| unsigned long four; |
| }; |
| |
| -/* Try to trigger unhandled padding in a structure. */ |
| -struct test_aligned { |
| - u32 internal1; |
| - u64 internal2; |
| -} __aligned(64); |
| - |
| +/* Trigger unhandled padding in a structure. */ |
| struct test_big_hole { |
| u8 one; |
| u8 two; |
| u8 three; |
| /* 61 byte padding hole here. */ |
| - struct test_aligned four; |
| + u8 four __aligned(64); |
| } __aligned(64); |
| |
| struct test_trailing_hole { |