lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-Id: <20250620112034.3395968-1-arnd@kernel.org>
Date: Fri, 20 Jun 2025 13:20:29 +0200
From: Arnd Bergmann <arnd@...nel.org>
To: Kees Cook <kees@...nel.org>,
	David Gow <davidgow@...gle.com>
Cc: Arnd Bergmann <arnd@...db.de>,
	"Gustavo A. R. Silva" <gustavoars@...nel.org>,
	linux-hardening@...r.kernel.org,
	linux-kernel@...r.kernel.org
Subject: [PATCH] lib/tests: split randstruct initializer tests

From: Arnd Bergmann <arnd@...db.de>

kunit code tents to cause problems with stack usage, especially when
sanitizers are enabled.

lib/tests/randstruct_kunit.c:306:1: error: the frame size of 1520 bytes is larger than 1280 bytes [-Werror=frame-larger-than=]

Splitting up the randstruct_initializers() function into two halves
helps since each side now stays below 1KB of stack even with sanitizers
enabled.

Fixes: b370f7eacdcf ("lib/tests: Add randstruct KUnit test")
Signed-off-by: Arnd Bergmann <arnd@...db.de>
---
 lib/tests/randstruct_kunit.c | 65 +++++++++++++++++++++++-------------
 1 file changed, 42 insertions(+), 23 deletions(-)

diff --git a/lib/tests/randstruct_kunit.c b/lib/tests/randstruct_kunit.c
index f3a2d63c4cfb..74211e2f186f 100644
--- a/lib/tests/randstruct_kunit.c
+++ b/lib/tests/randstruct_kunit.c
@@ -249,16 +249,6 @@ static void randstruct_initializers(struct kunit *test)
 	struct randstruct_mixed_shuffled mixed_shuffled = {
 		init_members
 	};
-	struct contains_randstruct_untouched contains_untouched = {
-		.untouched = {
-			init_members
-		},
-	};
-	struct contains_randstruct_shuffled contains_shuffled = {
-		.shuffled = {
-			init_members
-		},
-	};
 #define func_member(x, ignored)	\
 		.x = func_##x,
 	struct randstruct_funcs_untouched funcs_untouched = {
@@ -274,6 +264,47 @@ static void randstruct_initializers(struct kunit *test)
 			init_members
 		});
 
+	test_check_mixed_init(test, "named", &mixed_untouched, &mixed_shuffled);
+	test_check_mixed_init(test, "unnamed", &mixed_untouched,
+		&(struct randstruct_mixed_shuffled){
+			init_members
+		});
+
+	test_check_funcs_init(test, "named", &funcs_untouched, &funcs_shuffled);
+	test_check_funcs_init(test, "unnamed", &funcs_untouched,
+		&(struct randstruct_funcs_shuffled){
+			DO_MANY_MEMBERS(func_member)
+		});
+
+#undef func_member
+#undef init_members
+}
+
+static void randstruct_contains_initializers(struct kunit *test)
+{
+#define init_members		\
+		.a = 1,		\
+		.b = 3,		\
+		.c = 5,		\
+		.d = 7,		\
+		.e = 11,	\
+		.f = 13,	\
+		.g = 17,	\
+		.h = 19,
+	struct contains_randstruct_untouched contains_untouched = {
+		.untouched = {
+			init_members
+		},
+	};
+	struct contains_randstruct_shuffled contains_shuffled = {
+		.shuffled = {
+			init_members
+		},
+	};
+	struct randstruct_shuffled shuffled = {
+		init_members
+	};
+
 	test_check_contained_init(test, "named", &contains_untouched, &contains_shuffled);
 	test_check_contained_init(test, "unnamed", &contains_untouched,
 		&(struct contains_randstruct_shuffled){
@@ -289,19 +320,6 @@ static void randstruct_initializers(struct kunit *test)
 			.shuffled = shuffled,
 		});
 
-	test_check_mixed_init(test, "named", &mixed_untouched, &mixed_shuffled);
-	test_check_mixed_init(test, "unnamed", &mixed_untouched,
-		&(struct randstruct_mixed_shuffled){
-			init_members
-		});
-
-	test_check_funcs_init(test, "named", &funcs_untouched, &funcs_shuffled);
-	test_check_funcs_init(test, "unnamed", &funcs_untouched,
-		&(struct randstruct_funcs_shuffled){
-			DO_MANY_MEMBERS(func_member)
-		});
-
-#undef func_member
 #undef init_members
 }
 
@@ -319,6 +337,7 @@ static struct kunit_case randstruct_test_cases[] = {
 	KUNIT_CASE(randstruct_layout_fptr),
 	KUNIT_CASE(randstruct_layout_fptr_deep),
 	KUNIT_CASE(randstruct_initializers),
+	KUNIT_CASE(randstruct_contains_initializers),
 	{}
 };
 
-- 
2.39.5


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ