]> git.baikalelectronics.ru Git - kernel.git/commitdiff
lib/test_stackinit: Fix static initializer test
authorKees Cook <keescook@chromium.org>
Fri, 23 Jul 2021 22:19:31 +0000 (15:19 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Sep 2021 10:26:38 +0000 (12:26 +0200)
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: 6c784381a4ba ("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

index 2d7d257a430e6d24c78f6193419f96578496126e..35d398b065e4f970e9881ab1ac7e005444d94c64 100644 (file)
@@ -67,10 +67,10 @@ static bool range_contains(char *haystack_start, size_t haystack_size,
 #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 *haystack_start, size_t haystack_size,
                                        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
@@ -208,18 +207,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 {