From: Wei Gao via ltp <ltp@lists.linux.it>
To: ltp@lists.linux.it
Cc: Dan Carpenter <dan.carpenter@linaro.org>
Subject: [LTP] [PATCH v5] shmctl03: Fix 32-bit compat mode failure by adjusting comparisons for compat mode truncation
Date: Wed, 19 Aug 2026 03:17:05 +0000 [thread overview]
Message-ID: <20260819031716.26527-1-wegao@suse.com> (raw)
In-Reply-To: <20260430034724.1628-1-wegao@suse.com>
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.
Link: https://lore.kernel.org/ltp/aJm5SBOaRoe1e0PB@yuki.lan/
Signed-off-by: Wei Gao <wegao@suse.com>
Suggested-by: Cyril Hrubis <chrubis@suse.cz>
Reviewed-by: Andrea Cervesato <andrea.cervesato@suse.com>
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
---
v4->v5:
- Rebase to latest upstream code
include/tst_assert.h | 9 ++++---
lib/tst_assert.c | 27 ++++++++++++++++-----
testcases/kernel/syscalls/shmctl/shmctl03.c | 17 ++++++++++---
3 files changed, 41 insertions(+), 12 deletions(-)
diff --git a/include/tst_assert.h b/include/tst_assert.h
index dcb62dfea..2f1051270 100644
--- a/include/tst_assert.h
+++ b/include/tst_assert.h
@@ -21,14 +21,17 @@ 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)
+#define TST_ASSERT_SATURATED_INT 0x01
+#define TST_ASSERT_BITWISE 0x02
+
/*
* Same as tst_assert_int() but for unsigned long.
*/
void tst_assert_ulong(const char *file, const int lineno,
- const char *path, unsigned long val);
+ const char *path, unsigned long val, int 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, (0, ##__VA_ARGS__))
/*
* 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..fd651f53a 100644
--- a/lib/tst_assert.c
+++ b/lib/tst_assert.c
@@ -5,6 +5,7 @@
* Copyright (c) 2020 Cyril Hrubis <chrubis@suse.cz>
*/
#include <stdio.h>
+#include <limits.h>
#define TST_NO_DEFAULT_MAIN
#include "tst_assert.h"
#include "tst_test.h"
@@ -23,18 +24,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, int 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_BITWISE) {
+ 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)
diff --git a/testcases/kernel/syscalls/shmctl/shmctl03.c b/testcases/kernel/syscalls/shmctl/shmctl03.c
index 9e1c2f099..dfe5f17e3 100644
--- a/testcases/kernel/syscalls/shmctl/shmctl03.c
+++ b/testcases/kernel/syscalls/shmctl/shmctl03.c
@@ -30,9 +30,20 @@ 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);
+ if (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, TST_ASSERT_SATURATED_INT);
+ TST_ASSERT_ULONG(PATH_KERN_SHMMNI, info.shmmni, TST_ASSERT_BITWISE);
+ TST_ASSERT_ULONG(PATH_KERN_SHMALL, info.shmall, TST_ASSERT_BITWISE);
+ } else {
+ TST_ASSERT_ULONG(PATH_KERN_SHMMAX, info.shmmax);
+ TST_ASSERT_ULONG(PATH_KERN_SHMMNI, info.shmmni);
+ TST_ASSERT_ULONG(PATH_KERN_SHMALL, info.shmall);
+ }
}
static struct tst_test test = {
--
2.55.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
next prev parent reply other threads:[~2026-08-19 3:17 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-07 9:26 [LTP] [PATCH v1] shmctl03: Fix 32-bit compat mode failure by forcing limits Wei Gao via ltp
2026-04-10 13:14 ` Andrea Cervesato via ltp
2026-04-10 14:12 ` Wei Gao via ltp
2026-04-10 14:32 ` Andrea Cervesato via ltp
2026-04-13 6:19 ` [LTP] [PATCH v2] shmctl03: Fix 32-bit compat mode failure by adjusting comparisons for compat mode truncation Wei Gao via ltp
2026-04-29 8:04 ` [LTP] " linuxtestproject.agent
2026-04-29 11:18 ` [LTP] [PATCH v3] " Wei Gao via ltp
2026-04-29 12:33 ` [LTP] " linuxtestproject.agent
2026-04-30 3:47 ` [LTP] [PATCH v4] " Wei Gao via ltp
2026-04-30 6:35 ` [LTP] " linuxtestproject.agent
2026-05-06 17:28 ` Andrea Cervesato via ltp
2026-05-07 9:51 ` Wei Gao via ltp
2026-05-07 10:01 ` Andrea Cervesato via ltp
2026-08-19 3:17 ` Wei Gao via ltp [this message]
2026-08-19 3:48 ` linuxtestproject.agent
2026-08-19 7:11 ` Andrea Cervesato via ltp
2026-08-19 8:38 ` [LTP] [PATCH v6] " Wei Gao via ltp
2026-08-19 9:39 ` [LTP] " linuxtestproject.agent
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260819031716.26527-1-wegao@suse.com \
--to=ltp@lists.linux.it \
--cc=dan.carpenter@linaro.org \
--cc=wegao@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.