* [LTP] [PATCH v1] shmctl03: Fix 32-bit compat mode failure by forcing limits
@ 2026-01-28 7:10 Wei Gao via ltp
2026-02-11 13:20 ` Andrea Cervesato via ltp
0 siblings, 1 reply; 6+ messages in thread
From: Wei Gao via ltp @ 2026-01-28 7:10 UTC (permalink / raw)
To: ltp
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.
Signed-off-by: Wei Gao <wegao@suse.com>
---
testcases/kernel/syscalls/ipc/shmctl/shmctl03.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/testcases/kernel/syscalls/ipc/shmctl/shmctl03.c b/testcases/kernel/syscalls/ipc/shmctl/shmctl03.c
index a3291c37f..335a60980 100644
--- a/testcases/kernel/syscalls/ipc/shmctl/shmctl03.c
+++ b/testcases/kernel/syscalls/ipc/shmctl/shmctl03.c
@@ -13,6 +13,13 @@
#include "tst_safe_sysv_ipc.h"
#include "libnewipc.h"
+/* Force 32-bit limits to avoid overflow/mismatch on 64-bit kernels */
+#if __WORDSIZE == 32
+# define SET_SHM_LIMIT "2147483647"
+#else
+# define SET_SHM_LIMIT NULL
+#endif
+
static void verify_ipcinfo(void)
{
struct shminfo info;
@@ -37,4 +44,9 @@ static void verify_ipcinfo(void)
static struct tst_test test = {
.test_all = verify_ipcinfo,
+ .save_restore = (const struct tst_path_val[]) {
+ {"/proc/sys/kernel/shmmax", SET_SHM_LIMIT, TST_SR_TCONF_MISSING},
+ {"/proc/sys/kernel/shmall", SET_SHM_LIMIT, TST_SR_TCONF_MISSING},
+ {}
+ },
};
--
2.52.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [LTP] [PATCH v1] shmctl03: Fix 32-bit compat mode failure by forcing limits
2026-01-28 7:10 [LTP] [PATCH v1] shmctl03: Fix 32-bit compat mode failure by forcing limits Wei Gao via ltp
@ 2026-02-11 13:20 ` Andrea Cervesato via ltp
0 siblings, 0 replies; 6+ messages in thread
From: Andrea Cervesato via ltp @ 2026-02-11 13:20 UTC (permalink / raw)
To: Wei Gao, ltp
Hi!
We already have a discussion on this test, so we should take a look at
there " [LTP] shmctl03.c is broken for 32bit compat mode ".
Apparently, from 08 August 2025...
--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 6+ messages in thread
* [LTP] [PATCH v1] shmctl03: Fix 32-bit compat mode failure by forcing limits
@ 2026-04-07 9:26 Wei Gao via ltp
2026-04-10 13:14 ` Andrea Cervesato via ltp
0 siblings, 1 reply; 6+ messages in thread
From: Wei Gao via ltp @ 2026-04-07 9:26 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.
Link: https://lore.kernel.org/ltp/aJm5SBOaRoe1e0PB@yuki.lan/
Signed-off-by: Wei Gao <wegao@suse.com>
Suggested-by: Cyril Hrubis <chrubis@suse.cz>
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
---
include/tst_assert.h | 10 +++++---
lib/tst_assert.c | 25 ++++++++++++++-----
.../kernel/syscalls/ipc/shmctl/shmctl03.c | 12 ++++++---
3 files changed, 35 insertions(+), 12 deletions(-)
diff --git a/include/tst_assert.h b/include/tst_assert.h
index dcb62dfea..5b3bd0e12 100644
--- a/include/tst_assert.h
+++ b/include/tst_assert.h
@@ -21,14 +21,18 @@ 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_SATURATED_ULONG 0x02
+#define TST_ASSERT_BITWISE 0x04
+
/*
* 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..09d7d8a6f 100644
--- a/lib/tst_assert.c
+++ b/lib/tst_assert.c
@@ -23,18 +23,31 @@ 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) {
+ expected_val = (sys_val_64 > 2147483647ULL) ? 2147483647UL : (unsigned long)sys_val_64;
+ } else if (flags & TST_ASSERT_SATURATED_ULONG) {
+ expected_val = (sys_val_64 > 4294967295ULL) ? 4294967295UL : (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/ipc/shmctl/shmctl03.c b/testcases/kernel/syscalls/ipc/shmctl/shmctl03.c
index a1f53e7c1..6d073789c 100644
--- a/testcases/kernel/syscalls/ipc/shmctl/shmctl03.c
+++ b/testcases/kernel/syscalls/ipc/shmctl/shmctl03.c
@@ -30,9 +30,15 @@ static void verify_ipcinfo(void)
else
tst_res(TPASS, "shmmin = 1");
- TST_ASSERT_ULONG("/proc/sys/kernel/shmmax", info.shmmax);
- TST_ASSERT_ULONG("/proc/sys/kernel/shmmni", info.shmmni);
- TST_ASSERT_ULONG("/proc/sys/kernel/shmall", info.shmall);
+ if (tst_is_compat_mode()) {
+ TST_ASSERT_ULONG("/proc/sys/kernel/shmmax", info.shmmax, TST_ASSERT_SATURATED_INT);
+ TST_ASSERT_ULONG("/proc/sys/kernel/shmmni", info.shmmni, TST_ASSERT_BITWISE);
+ TST_ASSERT_ULONG("/proc/sys/kernel/shmall", info.shmall, TST_ASSERT_BITWISE);
+ } else {
+ TST_ASSERT_ULONG("/proc/sys/kernel/shmmax", info.shmmax);
+ TST_ASSERT_ULONG("/proc/sys/kernel/shmmni", info.shmmni);
+ TST_ASSERT_ULONG("/proc/sys/kernel/shmall", info.shmall);
+ }
}
static struct tst_test test = {
--
2.52.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [LTP] [PATCH v1] shmctl03: Fix 32-bit compat mode failure by forcing limits
2026-04-07 9:26 Wei Gao via ltp
@ 2026-04-10 13:14 ` Andrea Cervesato via ltp
2026-04-10 14:12 ` Wei Gao via ltp
0 siblings, 1 reply; 6+ messages in thread
From: Andrea Cervesato via ltp @ 2026-04-10 13:14 UTC (permalink / raw)
To: Wei Gao via ltp; +Cc: Dan Carpenter, ltp
Hi Wei,
this review is pretty accurate. Please follow the suggestions here first:
https://github.com/acerv/ltp-agent/actions/runs/24074831444
King regards,
--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [LTP] [PATCH v1] shmctl03: Fix 32-bit compat mode failure by forcing limits
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
0 siblings, 1 reply; 6+ messages in thread
From: Wei Gao via ltp @ 2026-04-10 14:12 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: Dan Carpenter, Wei Gao via ltp
On Fri, Apr 10, 2026 at 01:14:41PM +0000, Andrea Cervesato via ltp wrote:
> Hi Wei,
>
> this review is pretty accurate. Please follow the suggestions here first:
> https://github.com/acerv/ltp-agent/actions/runs/24074831444
I will update the subject line and use INT_MAX/UINT_MAX as AI suggested.
But I'd prefer to keep TST_ASSERT_SATURATED_ULONG even without a current caller,
as it completes the logic for the helper function. The logic is clear enough
that an extra comment isn't needed also, if you are agree then i will sent next patch.
Thanks.
>
> King regards,
> --
> Andrea Cervesato
> SUSE QE Automation Engineer Linux
> andrea.cervesato@suse.com
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [LTP] [PATCH v1] shmctl03: Fix 32-bit compat mode failure by forcing limits
2026-04-10 14:12 ` Wei Gao via ltp
@ 2026-04-10 14:32 ` Andrea Cervesato via ltp
0 siblings, 0 replies; 6+ messages in thread
From: Andrea Cervesato via ltp @ 2026-04-10 14:32 UTC (permalink / raw)
To: Wei Gao; +Cc: Dan Carpenter, Wei Gao via ltp
Hi Wei,
> I will update the subject line and use INT_MAX/UINT_MAX as AI suggested.
> But I'd prefer to keep TST_ASSERT_SATURATED_ULONG even without a current caller,
> as it completes the logic for the helper function. The logic is clear enough
> that an extra comment isn't needed also, if you are agree then i will sent next patch.
Fair enough, feel free to ignore that part and to send a new patch.
Regards,
--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-04-10 14:33 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-28 7:10 [LTP] [PATCH v1] shmctl03: Fix 32-bit compat mode failure by forcing limits Wei Gao via ltp
2026-02-11 13:20 ` Andrea Cervesato via ltp
-- strict thread matches above, loose matches on Subject: below --
2026-04-07 9:26 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
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.