From: Sasha Levin <sashal@kernel.org>
To: Steven Rostedt <rostedt@goodmis.org>,
Masami Hiramatsu <mhiramat@kernel.org>
Cc: Beau Belgrave <beaub@linux.microsoft.com>,
linux-trace-kernel@vger.kernel.org, Shuah Khan <shuah@kernel.org>,
linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH] selftests/user_events: cast pointers through uintptr_t
Date: Tue, 3 Nov 2026 11:39:13 -0500 [thread overview]
Message-ID: <20261103163913.640876-1-sashal@kernel.org> (raw)
The tests put pointers into the 64-bit fields of struct user_reg and
struct user_unreg with a plain (__u64) cast, which warns on 32-bit
architectures:
abi_test.c:182:25: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
Cast through uintptr_t.
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
Found with 32-bit builds of the selftests (gcc 16 and clang 21 with
-m32, with and without -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64);
KernelCI's 32-bit arm builds show the same warnings. The changed files
build without them now, and the x86_64 builds don't change.
.../testing/selftests/user_events/abi_test.c | 10 +++---
.../testing/selftests/user_events/dyn_test.c | 6 ++--
.../selftests/user_events/ftrace_test.c | 32 +++++++++----------
.../testing/selftests/user_events/perf_test.c | 10 +++---
4 files changed, 29 insertions(+), 29 deletions(-)
diff --git a/tools/testing/selftests/user_events/abi_test.c b/tools/testing/selftests/user_events/abi_test.c
index b71813eaf5c04..21e1e3cca1979 100644
--- a/tools/testing/selftests/user_events/abi_test.c
+++ b/tools/testing/selftests/user_events/abi_test.c
@@ -179,10 +179,10 @@ static int reg_enable_multi(void *enable, int size, int bit, int flags,
}
reg.size = sizeof(reg);
- reg.name_args = (__u64)full_args;
+ reg.name_args = (__u64)(uintptr_t)full_args;
reg.flags = USER_EVENT_REG_MULTI_FORMAT | flags;
reg.enable_bit = bit;
- reg.enable_addr = (__u64)enable;
+ reg.enable_addr = (__u64)(uintptr_t)enable;
reg.enable_size = size;
ret = ioctl(fd, DIAG_IOCSREG, ®);
@@ -202,10 +202,10 @@ static int reg_enable_flags(void *enable, int size, int bit, int flags)
return -1;
reg.size = sizeof(reg);
- reg.name_args = (__u64)"__abi_event";
+ reg.name_args = (__u64)(uintptr_t)"__abi_event";
reg.flags = flags;
reg.enable_bit = bit;
- reg.enable_addr = (__u64)enable;
+ reg.enable_addr = (__u64)(uintptr_t)enable;
reg.enable_size = size;
ret = ioctl(fd, DIAG_IOCSREG, ®);
@@ -231,7 +231,7 @@ static int reg_disable(void *enable, int bit)
reg.size = sizeof(reg);
reg.disable_bit = bit;
- reg.disable_addr = (__u64)enable;
+ reg.disable_addr = (__u64)(uintptr_t)enable;
ret = ioctl(fd, DIAG_IOCSUNREG, ®);
diff --git a/tools/testing/selftests/user_events/dyn_test.c b/tools/testing/selftests/user_events/dyn_test.c
index 78e3c33f4015f..32f159544d0bc 100644
--- a/tools/testing/selftests/user_events/dyn_test.c
+++ b/tools/testing/selftests/user_events/dyn_test.c
@@ -58,9 +58,9 @@ static int reg_event(int fd, int *check, int bit, const char *value)
struct user_reg reg = {0};
reg.size = sizeof(reg);
- reg.name_args = (__u64)value;
+ reg.name_args = (__u64)(uintptr_t)value;
reg.enable_bit = bit;
- reg.enable_addr = (__u64)check;
+ reg.enable_addr = (__u64)(uintptr_t)check;
reg.enable_size = sizeof(*check);
if (ioctl(fd, DIAG_IOCSREG, ®) == -1)
@@ -75,7 +75,7 @@ static int unreg_event(int fd, int *check, int bit)
unreg.size = sizeof(unreg);
unreg.disable_bit = bit;
- unreg.disable_addr = (__u64)check;
+ unreg.disable_addr = (__u64)(uintptr_t)check;
return ioctl(fd, DIAG_IOCSUNREG, &unreg);
}
diff --git a/tools/testing/selftests/user_events/ftrace_test.c b/tools/testing/selftests/user_events/ftrace_test.c
index decce06b9ba83..b9c75202f0bd3 100644
--- a/tools/testing/selftests/user_events/ftrace_test.c
+++ b/tools/testing/selftests/user_events/ftrace_test.c
@@ -127,7 +127,7 @@ static int clear(int *check)
unreg.size = sizeof(unreg);
unreg.disable_bit = 31;
- unreg.disable_addr = (__u64)check;
+ unreg.disable_addr = (__u64)(uintptr_t)check;
fd = open(data_file, O_RDWR);
@@ -174,9 +174,9 @@ static int check_print_fmt(const char *event, const char *expected, int *check)
return fd;
reg.size = sizeof(reg);
- reg.name_args = (__u64)event;
+ reg.name_args = (__u64)(uintptr_t)event;
reg.enable_bit = 31;
- reg.enable_addr = (__u64)check;
+ reg.enable_addr = (__u64)(uintptr_t)check;
reg.enable_size = sizeof(*check);
/* Register should work */
@@ -239,14 +239,14 @@ TEST_F(user, register_events) {
struct user_unreg unreg = {0};
reg.size = sizeof(reg);
- reg.name_args = (__u64)"__test_event u32 field1; u32 field2";
+ reg.name_args = (__u64)(uintptr_t)"__test_event u32 field1; u32 field2";
reg.enable_bit = 31;
- reg.enable_addr = (__u64)&self->check;
+ reg.enable_addr = (__u64)(uintptr_t)&self->check;
reg.enable_size = sizeof(self->check);
unreg.size = sizeof(unreg);
unreg.disable_bit = 31;
- unreg.disable_addr = (__u64)&self->check;
+ unreg.disable_addr = (__u64)(uintptr_t)&self->check;
/* Register should work */
ASSERT_EQ(0, ioctl(self->data_fd, DIAG_IOCSREG, ®));
@@ -263,13 +263,13 @@ TEST_F(user, register_events) {
/* Register without separator spacing should still match */
reg.enable_bit = 29;
- reg.name_args = (__u64)"__test_event u32 field1;u32 field2";
+ reg.name_args = (__u64)(uintptr_t)"__test_event u32 field1;u32 field2";
ASSERT_EQ(0, ioctl(self->data_fd, DIAG_IOCSREG, ®));
ASSERT_EQ(0, reg.write_index);
/* Multiple registers to same name but different args should fail */
reg.enable_bit = 29;
- reg.name_args = (__u64)"__test_event u32 field1;";
+ reg.name_args = (__u64)(uintptr_t)"__test_event u32 field1;";
ASSERT_EQ(-1, ioctl(self->data_fd, DIAG_IOCSREG, ®));
ASSERT_EQ(EADDRINUSE, errno);
@@ -310,9 +310,9 @@ TEST_F(user, write_events) {
int before = 0, after = 0;
reg.size = sizeof(reg);
- reg.name_args = (__u64)"__test_event u32 field1; u32 field2";
+ reg.name_args = (__u64)(uintptr_t)"__test_event u32 field1; u32 field2";
reg.enable_bit = 31;
- reg.enable_addr = (__u64)&self->check;
+ reg.enable_addr = (__u64)(uintptr_t)&self->check;
reg.enable_size = sizeof(self->check);
field1 = 1;
@@ -367,9 +367,9 @@ TEST_F(user, write_empty_events) {
int before = 0, after = 0;
reg.size = sizeof(reg);
- reg.name_args = (__u64)"__test_event";
+ reg.name_args = (__u64)(uintptr_t)"__test_event";
reg.enable_bit = 31;
- reg.enable_addr = (__u64)&self->check;
+ reg.enable_addr = (__u64)(uintptr_t)&self->check;
reg.enable_size = sizeof(self->check);
io[0].iov_base = ®.write_index;
@@ -401,9 +401,9 @@ TEST_F(user, write_fault) {
void *anon;
reg.size = sizeof(reg);
- reg.name_args = (__u64)"__test_event u64 anon";
+ reg.name_args = (__u64)(uintptr_t)"__test_event u64 anon";
reg.enable_bit = 31;
- reg.enable_addr = (__u64)&self->check;
+ reg.enable_addr = (__u64)(uintptr_t)&self->check;
reg.enable_size = sizeof(self->check);
anon = mmap(NULL, l, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
@@ -439,9 +439,9 @@ TEST_F(user, write_validator) {
int before = 0, after = 0;
reg.size = sizeof(reg);
- reg.name_args = (__u64)"__test_event __rel_loc char[] data";
+ reg.name_args = (__u64)(uintptr_t)"__test_event __rel_loc char[] data";
reg.enable_bit = 31;
- reg.enable_addr = (__u64)&self->check;
+ reg.enable_addr = (__u64)(uintptr_t)&self->check;
reg.enable_size = sizeof(self->check);
/* Register should work */
diff --git a/tools/testing/selftests/user_events/perf_test.c b/tools/testing/selftests/user_events/perf_test.c
index 5727cb5b914cf..b444d114b2f00 100644
--- a/tools/testing/selftests/user_events/perf_test.c
+++ b/tools/testing/selftests/user_events/perf_test.c
@@ -89,7 +89,7 @@ static int clear(int *check)
unreg.size = sizeof(unreg);
unreg.disable_bit = 31;
- unreg.disable_addr = (__u64)check;
+ unreg.disable_addr = (__u64)(uintptr_t)check;
int fd = open(data_file, O_RDWR);
@@ -160,9 +160,9 @@ TEST_F(user, perf_write) {
__u32 *val;
reg.size = sizeof(reg);
- reg.name_args = (__u64)"__test_event u32 field1; u32 field2";
+ reg.name_args = (__u64)(uintptr_t)"__test_event u32 field1; u32 field2";
reg.enable_bit = 31;
- reg.enable_addr = (__u64)&self->check;
+ reg.enable_addr = (__u64)(uintptr_t)&self->check;
reg.enable_size = sizeof(self->check);
/* Register should work */
@@ -224,9 +224,9 @@ TEST_F(user, perf_empty_events) {
__u32 *val;
reg.size = sizeof(reg);
- reg.name_args = (__u64)"__test_event";
+ reg.name_args = (__u64)(uintptr_t)"__test_event";
reg.enable_bit = 31;
- reg.enable_addr = (__u64)&self->check;
+ reg.enable_addr = (__u64)(uintptr_t)&self->check;
reg.enable_size = sizeof(self->check);
/* Register should work */
--
2.53.0
reply other threads:[~2026-11-03 16:39 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20261103163913.640876-1-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=beaub@linux.microsoft.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mhiramat@kernel.org \
--cc=rostedt@goodmis.org \
--cc=shuah@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®