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: <948937bfe461cf0fb6ade2623e51f673f845fa51.1768298756.git.chleroy@kernel.org>
Date: Tue, 13 Jan 2026 11:08:14 +0100
From: "Christophe Leroy (CS GROUP)" <chleroy@...nel.org>
To: Kees Cook <kees@...nel.org>,
	Andy Lutomirski <luto@...capital.net>,
	Will Drewry <wad@...omium.org>,
	Shuah Khan <shuah@...nel.org>,
	"Dmitry V. Levin" <ldv@...ace.io>
Cc: "Christophe Leroy (CS GROUP)" <chleroy@...nel.org>,
	linux-kselftest@...r.kernel.org,
	linux-kernel@...r.kernel.org
Subject: [PATCH] selftests: harness: fix again 32-bit build warnings in __EXPECT()

/home/chleroy/linux-powerpc/tools/testing/selftests/../../../tools/testing/selftests/kselftest_harness.h:770:49: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  770 |                         uintmax_t __exp_print = (uintmax_t)__exp; \
      |                                                 ^
/home/chleroy/linux-powerpc/tools/testing/selftests/../../../tools/testing/selftests/kselftest_harness.h:530:9: note: in expansion of macro '__EXPECT'
  530 |         __EXPECT(expected, #expected, seen, #seen, !=, 1)
      |         ^~~~~~~~
test-pcmtest-driver.c:137:9: note: in expansion of macro 'ASSERT_NE'
  137 |         ASSERT_NE(card_name, NULL);
      |         ^~~~~~~~~
/home/chleroy/linux-powerpc/tools/testing/selftests/../../../tools/testing/selftests/kselftest_harness.h:771:50: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  771 |                         uintmax_t __seen_print = (uintmax_t)__seen; \
      |                                                  ^
/home/chleroy/linux-powerpc/tools/testing/selftests/../../../tools/testing/selftests/kselftest_harness.h:530:9: note: in expansion of macro '__EXPECT'
  530 |         __EXPECT(expected, #expected, seen, #seen, !=, 1)
      |         ^~~~~~~~
test-pcmtest-driver.c:137:9: note: in expansion of macro 'ASSERT_NE'
  137 |         ASSERT_NE(card_name, NULL);
      |         ^~~~~~~~~
...

Those warnings were fixed by commit b5bb6d3068ea ("selftests/seccomp:
fix 32-bit build warnings") but then reintroduced by
commit 02bc220dc6dc ("selftests: harness: fix printing of mismatch
values in __EXPECT()")

Fix them for good this time, without re-introducing the printing
mismatch.

Fixes: 02bc220dc6dc ("selftests: harness: fix printing of mismatch values in __EXPECT()")
Signed-off-by: Christophe Leroy (CS GROUP) <chleroy@...nel.org>
---
 tools/testing/selftests/kselftest_harness.h | 37 ++++++++++++---------
 1 file changed, 21 insertions(+), 16 deletions(-)

diff --git a/tools/testing/selftests/kselftest_harness.h b/tools/testing/selftests/kselftest_harness.h
index 16a119a4656c7..80a81f96fd5bf 100644
--- a/tools/testing/selftests/kselftest_harness.h
+++ b/tools/testing/selftests/kselftest_harness.h
@@ -759,6 +759,11 @@ static inline void __kselftest_memset_safe(void *s, int c, size_t n)
 
 #define is_signed_var(var)	(!!(((__typeof__(var))(-1)) < (__typeof__(var))1))
 
+#define __ulong_type(x) \
+	__typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
+#define __long_type(x) \
+	__typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0L), 0LL, 0L))
+
 #define __EXPECT(_expected, _expected_str, _seen, _seen_str, _t, _assert) do { \
 	/* Avoid multiple evaluation of the cases */ \
 	__typeof__(_expected) __exp = (_expected); \
@@ -767,35 +772,35 @@ static inline void __kselftest_memset_safe(void *s, int c, size_t n)
 		/* Report with actual signedness to avoid weird output. */ \
 		switch (is_signed_var(__exp) * 2 + is_signed_var(__seen)) { \
 		case 0: { \
-			uintmax_t __exp_print = (uintmax_t)__exp; \
-			uintmax_t __seen_print = (uintmax_t)__seen; \
+			__ulong_type(__exp) __exp_print = (__ulong_type(__exp))__exp; \
+			__ulong_type(__seen) __seen_print = (__ulong_type(__seen))__seen; \
 			__TH_LOG("Expected %s (%ju) %s %s (%ju)", \
-				 _expected_str, __exp_print, #_t, \
-				 _seen_str, __seen_print); \
+				 _expected_str, (uintmax_t)__exp_print, #_t, \
+				 _seen_str, (uintmax_t)__seen_print); \
 			break; \
 			} \
 		case 1: { \
-			uintmax_t __exp_print = (uintmax_t)__exp; \
-			intmax_t  __seen_print = (intmax_t)__seen; \
+			__ulong_type(__exp) __exp_print = (__ulong_type(__exp))__exp; \
+			__long_type(__seen) __seen_print = (__long_type(__seen))__seen; \
 			__TH_LOG("Expected %s (%ju) %s %s (%jd)", \
-				 _expected_str, __exp_print, #_t, \
-				 _seen_str, __seen_print); \
+				 _expected_str, (uintmax_t)__exp_print, #_t, \
+				 _seen_str, (intmax_t)__seen_print); \
 			break; \
 			} \
 		case 2: { \
-			intmax_t  __exp_print = (intmax_t)__exp; \
-			uintmax_t __seen_print = (uintmax_t)__seen; \
+			__long_type(__exp) __exp_print = (__long_type(__exp))__exp; \
+			__ulong_type(__seen) __seen_print = (__ulong_type(__seen))__seen; \
 			__TH_LOG("Expected %s (%jd) %s %s (%ju)", \
-				 _expected_str, __exp_print, #_t, \
-				 _seen_str, __seen_print); \
+				 _expected_str, (intmax_t)__exp_print, #_t, \
+				 _seen_str, (uintmax_t)__seen_print); \
 			break; \
 			} \
 		case 3: { \
-			intmax_t  __exp_print = (intmax_t)__exp; \
-			intmax_t  __seen_print = (intmax_t)__seen; \
+			__long_type(__exp) __exp_print = (__long_type(__exp))__exp; \
+			__long_type(__seen) __seen_print = (__long_type(__seen))__seen; \
 			__TH_LOG("Expected %s (%jd) %s %s (%jd)", \
-				 _expected_str, __exp_print, #_t, \
-				 _seen_str, __seen_print); \
+				 _expected_str, (intmax_t)__exp_print, #_t, \
+				 _seen_str, (intmax_t)__seen_print); \
 			break; \
 			} \
 		} \
-- 
2.49.0


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ