Linux Test Project
 help / color / mirror / Atom feed
* Re: [LTP] lib: Extend tst_assert_ulong() with enum flags
  2026-08-31  8:16 [LTP] [PATCH v9 1/2] " Wei Gao via ltp
@ 2026-08-31  9:00 ` linuxtestproject.agent
  0 siblings, 0 replies; 6+ messages in thread
From: linuxtestproject.agent @ 2026-08-31  9:00 UTC (permalink / raw)
  To: Wei Gao; +Cc: ltp

Hi Wei,

On Aug 31, 2026, Wei Gao wrote:
> lib: Extend tst_assert_ulong() with enum flags

--- [PATCH 1/2] ---

> #define TST_ASSERT_ULONG(path, val, ...) \
> 	tst_assert_ulong(__FILE__, __LINE__, path, val, \
> 		TST_2_(dummy, ##__VA_ARGS__, TST_ASSERT_NONE))

The modified public TST_ASSERT_ULONG() macro needs a kernel-doc comment
documenting its optional flags argument.

Verdict - Needs revision

---
Note:

The agent can sometimes produce false positives although often its
findings are genuine. If you find issues with the review, please
comment this email or ignore the suggestions.

Regards,
LTP AI Reviewer

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [LTP] [PATCH v10 0/2] shmctl03: Fix 32-bit compat mode failure
@ 2026-09-03  3:32 Wei Gao via ltp
  2026-09-03  3:32 ` [LTP] [PATCH v10 1/2] lib: Extend tst_assert_ulong() with enum flags Wei Gao via ltp
  2026-09-03  3:32 ` [LTP] [PATCH v10 2/2] shmctl03: Fix 32-bit compat mode failure Wei Gao via ltp
  0 siblings, 2 replies; 6+ messages in thread
From: Wei Gao via ltp @ 2026-09-03  3:32 UTC (permalink / raw)
  To: ltp

v9->v10:
- Update comments
- Use decimal for enum

Wei Gao (2):
  lib: Extend tst_assert_ulong() with enum flags
  shmctl03: Fix 32-bit compat mode failure

 include/tst_assert.h                        | 34 ++++++++++++++++++---
 lib/tst_assert.c                            | 26 ++++++++++++----
 testcases/kernel/syscalls/shmctl/shmctl03.c | 13 ++++++--
 3 files changed, 59 insertions(+), 14 deletions(-)

-- 
2.55.0


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [LTP] [PATCH v10 1/2] lib: Extend tst_assert_ulong() with enum flags
  2026-09-03  3:32 [LTP] [PATCH v10 0/2] shmctl03: Fix 32-bit compat mode failure Wei Gao via ltp
@ 2026-09-03  3:32 ` Wei Gao via ltp
  2026-09-03  6:57   ` [LTP] " linuxtestproject.agent
  2026-09-03  3:32 ` [LTP] [PATCH v10 2/2] shmctl03: Fix 32-bit compat mode failure Wei Gao via ltp
  1 sibling, 1 reply; 6+ messages in thread
From: Wei Gao via ltp @ 2026-09-03  3:32 UTC (permalink / raw)
  To: ltp

Introduce enum tst_assert_flags (including TST_ASSERT_SATURATED_INT and
TST_ASSERT_TRUNC_32BIT) to tst_assert_ulong(). This enables type-safe
handling of 32-bit compat-mode truncation and clamping behaviors on
64-bit kernels when verifying sysfs/procfs limits.

Reviewed-by: Petr Vorel <pvorel@suse.cz>
Signed-off-by: Wei Gao <wegao@suse.com>
---
 include/tst_assert.h | 34 +++++++++++++++++++++++++++++-----
 lib/tst_assert.c     | 26 ++++++++++++++++++++------
 2 files changed, 49 insertions(+), 11 deletions(-)

diff --git a/include/tst_assert.h b/include/tst_assert.h
index dcb62dfea..c4112a237 100644
--- a/include/tst_assert.h
+++ b/include/tst_assert.h
@@ -21,14 +21,38 @@ void tst_assert_int(const char *file, const int lineno,
 #define TST_ASSERT_FILE_INT(path, prefix, val) \
 	tst_assert_file_int(__FILE__, __LINE__, path, prefix, val)
 
-/*
- * Same as tst_assert_int() but for unsigned long.
+/**
+ * enum tst_assert_flags - Bitwise flags for tst_assert_ulong().
+ *
+ * @TST_ASSERT_SATURATED_INT: Clamps the value at %INT_MAX if it exceeds it.
+ * @TST_ASSERT_TRUNC_32BIT: Keeps only the low 32 bits of the read value,
+ *                          truncating any higher bits.
+ */
+enum tst_assert_flags {
+	TST_ASSERT_SATURATED_INT = 1,
+	TST_ASSERT_TRUNC_32BIT   = 2,
+};
+
+/**
+ * tst_assert_ulong() - Assert that an unsigned long value in a file matches.
+ * @file: The source file of the assertion (usually __FILE__).
+ * @lineno: The source line number of the assertion (usually __LINE__).
+ * @path: Path to the sysfs or procfs file to read from.
+ * @val: The expected unsigned long value to compare against.
+ * @flags: Bitwise flags controlling how the read value is processed.
+ *         See &enum tst_assert_flags.
+ *
+ * This function reads an integer value from the file specified by @path
+ * and compares it with @val. It allows handling of 32-bit compat mode
+ * truncation/clamping on 64-bit systems via @flags.
  */
 void tst_assert_ulong(const char *file, const int lineno,
-                      const char *path, unsigned long val);
+                      const char *path, unsigned long val,
+                      enum tst_assert_flags flags);
 
-#define TST_ASSERT_ULONG(path, val) \
-	tst_assert_ulong(__FILE__, __LINE__, path, val)
+#define TST_ASSERT_ULONG(path, val, ...) \
+	tst_assert_ulong(__FILE__, __LINE__, path, val, \
+		TST_2_(dummy, ##__VA_ARGS__, 0))
 
 /*
  * Asserts that integer value stored in the prefix field of file pointed by path
diff --git a/lib/tst_assert.c b/lib/tst_assert.c
index b68bd5d39..04241d31b 100644
--- a/lib/tst_assert.c
+++ b/lib/tst_assert.c
@@ -23,18 +23,32 @@ void tst_assert_int(const char *file, const int lineno, const char *path, int va
 	tst_res_(file, lineno, TFAIL, "%s != %d got %d", path, val, sys_val);
 }
 
-void tst_assert_ulong(const char *file, const int lineno, const char *path, unsigned long val)
+void tst_assert_ulong(const char *file, const int lineno, const char *path,
+		      unsigned long val, enum tst_assert_flags flags)
 {
-	unsigned long sys_val;
-
-	safe_file_scanf(file, lineno, NULL, path, "%lu", &sys_val);
+	unsigned long long sys_val_64;
+	unsigned long expected_val;
+
+	safe_file_scanf(file, lineno, NULL, path, "%llu", &sys_val_64);
+
+	if (flags & TST_ASSERT_SATURATED_INT) {
+		if (sys_val_64 > (unsigned long long)INT_MAX)
+			expected_val = (unsigned long)INT_MAX;
+		else
+			expected_val = (unsigned long)sys_val_64;
+	} else if (flags & TST_ASSERT_TRUNC_32BIT) {
+		expected_val = (unsigned long)(sys_val_64 & 0xFFFFFFFFULL);
+	} else {
+		expected_val = (unsigned long)sys_val_64;
+	}
 
-	if (val == sys_val) {
+	if (val == expected_val) {
 		tst_res_(file, lineno, TPASS, "%s = %lu", path, val);
 		return;
 	}
 
-	tst_res_(file, lineno, TFAIL, "%s != %lu got %lu", path, val, sys_val);
+	tst_res_(file, lineno, TFAIL, "%s != %lu got %lu (raw: %llu)",
+		path, val, expected_val, sys_val_64);
 }
 
 void tst_assert_file_int(const char *file, const int lineno, const char *path, const char *prefix, int val)
-- 
2.55.0


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [LTP] [PATCH v10 2/2] shmctl03: Fix 32-bit compat mode failure
  2026-09-03  3:32 [LTP] [PATCH v10 0/2] shmctl03: Fix 32-bit compat mode failure Wei Gao via ltp
  2026-09-03  3:32 ` [LTP] [PATCH v10 1/2] lib: Extend tst_assert_ulong() with enum flags Wei Gao via ltp
@ 2026-09-03  3:32 ` Wei Gao via ltp
  1 sibling, 0 replies; 6+ messages in thread
From: Wei Gao via ltp @ 2026-09-03  3:32 UTC (permalink / raw)
  To: ltp; +Cc: Dan Carpenter

On 64-bit kernels, the default shmmax and shmall values often exceed
the range of a 32-bit unsigned long or are clipped differently by
the kernel's compat syscall layer than they appear in /proc.

Fix this by utilizing the new TST_ASSERT_ULONG() flags to properly
clamp and truncate the expected values under compat mode.

Link: https://lore.kernel.org/ltp/aJm5SBOaRoe1e0PB@yuki.lan/
Suggested-by: Cyril Hrubis <chrubis@suse.cz>
Reviewed-by: Andrea Cervesato <andrea.cervesato@suse.com>
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Reported-by: Dan Carpenter <error27@gmail.com>
Signed-off-by: Wei Gao <wegao@suse.com>
---
 testcases/kernel/syscalls/shmctl/shmctl03.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/testcases/kernel/syscalls/shmctl/shmctl03.c b/testcases/kernel/syscalls/shmctl/shmctl03.c
index 9e1c2f099..cf021be4c 100644
--- a/testcases/kernel/syscalls/shmctl/shmctl03.c
+++ b/testcases/kernel/syscalls/shmctl/shmctl03.c
@@ -30,9 +30,16 @@ static void verify_ipcinfo(void)
 	else
 		tst_res(TPASS, "shmmin = 1");
 
-	TST_ASSERT_ULONG(PATH_KERN_SHMMAX, info.shmmax);
-	TST_ASSERT_ULONG(PATH_KERN_SHMMNI, info.shmmni);
-	TST_ASSERT_ULONG(PATH_KERN_SHMALL, info.shmall);
+	int c = tst_is_compat_mode();
+
+	/*
+	 * On 64-bit kernel, shmmax is clamped to INT_MAX for 32-bit
+	 * compat syscall, while shmmni and shmall are truncated
+	 * to 32-bit.
+	 */
+	TST_ASSERT_ULONG(PATH_KERN_SHMMAX, info.shmmax, c ? TST_ASSERT_SATURATED_INT : 0);
+	TST_ASSERT_ULONG(PATH_KERN_SHMMNI, info.shmmni, c ? TST_ASSERT_TRUNC_32BIT : 0);
+	TST_ASSERT_ULONG(PATH_KERN_SHMALL, info.shmall, c ? TST_ASSERT_TRUNC_32BIT : 0);
 }
 
 static struct tst_test test = {
-- 
2.55.0


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [LTP] lib: Extend tst_assert_ulong() with enum flags
  2026-09-03  3:32 ` [LTP] [PATCH v10 1/2] lib: Extend tst_assert_ulong() with enum flags Wei Gao via ltp
@ 2026-09-03  6:57   ` linuxtestproject.agent
  0 siblings, 0 replies; 6+ messages in thread
From: linuxtestproject.agent @ 2026-09-03  6:57 UTC (permalink / raw)
  To: Wei Gao; +Cc: ltp

Hi Wei,

On Thu, Sep 3, 2026, Wei Gao wrote:
> lib: Extend tst_assert_ulong() with enum flags

--- [PATCH 1/2] ---

> void tst_assert_ulong(const char *file, const int lineno,
>                       const char *path, unsigned long val,
>                       enum tst_assert_flags flags);

The continuation indentation uses spaces and fails scripts/checkpatch.pl.
Align these lines with tabs, as in the surrounding declarations.

Verdict - Needs revision

---
Note:

The agent can sometimes produce false positives although often its
findings are genuine. If you find issues with the review, please
comment this email or ignore the suggestions.

Regards,
LTP AI Reviewer

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [LTP] lib: Extend tst_assert_ulong() with enum flags
  2026-09-03  9:52 [LTP] [PATCH v11 1/2] lib: Extend tst_assert_ulong() with enum flags Wei Gao via ltp
@ 2026-09-03 12:00 ` linuxtestproject.agent
  0 siblings, 0 replies; 6+ messages in thread
From: linuxtestproject.agent @ 2026-09-03 12:00 UTC (permalink / raw)
  To: Wei Gao; +Cc: ltp

Hi Wei,

On Sep 3, 2026, Wei Gao wrote:
> lib: Extend tst_assert_ulong() with enum flags

--- [PATCH 1/2] ---

> +#define TST_ASSERT_ULONG(path, val, ...) \
> +	tst_assert_ulong(__FILE__, __LINE__, path, val, \
> +		TST_2_(dummy, ##__VA_ARGS__, 0))

TST_ASSERT_ULONG is a modified public macro but lacks the required
kernel-doc comment. Please document its optional flags argument and the
zero-flags default at the macro itself.

Verdict - Needs revision

---
Note:

The agent can sometimes produce false positives although often its
findings are genuine. If you find issues with the review, please
comment this email or ignore the suggestions.

Regards,
LTP AI Reviewer

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-09-03 12:01 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-03  3:32 [LTP] [PATCH v10 0/2] shmctl03: Fix 32-bit compat mode failure Wei Gao via ltp
2026-09-03  3:32 ` [LTP] [PATCH v10 1/2] lib: Extend tst_assert_ulong() with enum flags Wei Gao via ltp
2026-09-03  6:57   ` [LTP] " linuxtestproject.agent
2026-09-03  3:32 ` [LTP] [PATCH v10 2/2] shmctl03: Fix 32-bit compat mode failure Wei Gao via ltp
  -- strict thread matches above, loose matches on Subject: below --
2026-09-03  9:52 [LTP] [PATCH v11 1/2] lib: Extend tst_assert_ulong() with enum flags Wei Gao via ltp
2026-09-03 12:00 ` [LTP] " linuxtestproject.agent
2026-08-31  8:16 [LTP] [PATCH v9 1/2] " Wei Gao via ltp
2026-08-31  9:00 ` [LTP] " linuxtestproject.agent

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox