From: Stian Halseth <stian@itx.no>
To: Andreas Larsson <andreas@gaisler.com>,
"David S . Miller" <davem@davemloft.net>,
Kees Cook <kees@kernel.org>,
sparclinux@vger.kernel.org
Cc: Andy Lutomirski <luto@amacapital.net>,
Will Drewry <wad@chromium.org>, Oleg Nesterov <oleg@redhat.com>,
Shuah Khan <shuah@kernel.org>,
linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org,
John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>,
Stian Halseth <stian@itx.no>
Subject: [PATCH 2/2] selftests/seccomp: add sparc64 support
Date: Wed, 2 Sep 2026 00:08:11 +0200 [thread overview]
Message-ID: <20260901220811.3369666-3-stian@itx.no> (raw)
In-Reply-To: <20260901220811.3369666-1-stian@itx.no>
sparc64 now selects HAVE_ARCH_SECCOMP_FILTER, so teach seccomp_bpf
how to read and write its registers: the syscall number lives in %g1
and the return value in %o0, addressed through the NT_PRSTATUS regset
(16 u_regs, 16 window registers, then tstate/tpc/tnpc/y).
Errors are signaled by the carry bit in tstate with a positive errno
value in %o0, so provide a SYSCALL_RET_SET that maintains both, and
mark the arch SYSCALL_RET_SET_ON_PTRACE_EXIT since a return value
poked at entry would be overwritten by the syscall skip path, as on
powerpc.
Passes 95 of 95 on an UltraSPARC T4-1 (16 skipped for missing
optional features such as uprobes).
Link: https://github.com/sparclinux/issues/issues/11
Signed-off-by: Stian Halseth <stian@itx.no>
---
tools/testing/selftests/seccomp/seccomp_bpf.c | 35 +++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/tools/testing/selftests/seccomp/seccomp_bpf.c b/tools/testing/selftests/seccomp/seccomp_bpf.c
index 0622bc2acad4..30b777f357d8 100644
--- a/tools/testing/selftests/seccomp/seccomp_bpf.c
+++ b/tools/testing/selftests/seccomp/seccomp_bpf.c
@@ -1872,6 +1872,41 @@ TEST_F(TRACE_poke, getpid_runs_normally)
# define ARCH_REGS struct user_regs_struct
# define SYSCALL_NUM(_regs) (_regs).orig_d0
# define SYSCALL_RET(_regs) (_regs).d0
+#elif defined(__sparc__) && defined(__arch64__)
+/*
+ * The NT_PRSTATUS regset: %g0-%g7 and %o0-%o7, the 16 window
+ * registers as read back from the stack, then tstate, tpc, tnpc
+ * and y.
+ */
+struct sparc64_user_regs {
+ __u64 u_regs[16];
+ __u64 window[16];
+ __u64 tstate;
+ __u64 tpc;
+ __u64 tnpc;
+ __u64 y;
+};
+# define ARCH_REGS struct sparc64_user_regs
+# define SYSCALL_NUM(_regs) (_regs).u_regs[1] /* %g1 */
+# define SYSCALL_RET(_regs) (_regs).u_regs[8] /* %o0 */
+/*
+ * A syscall error is signaled by the carry bit in tstate, with the
+ * errno held in %o0 as a positive value; the carry can only be
+ * written reliably once the syscall has been skipped or has run.
+ */
+# define SPARC64_TSTATE_CARRY 0x0000001100000000UL /* xcc.c | icc.c */
+# define SYSCALL_RET_SET(_regs, _val) \
+ do { \
+ typeof(_val) _result = (_val); \
+ if (_result < 0) { \
+ SYSCALL_RET(_regs) = -_result; \
+ (_regs).tstate |= SPARC64_TSTATE_CARRY; \
+ } else { \
+ SYSCALL_RET(_regs) = _result; \
+ (_regs).tstate &= ~SPARC64_TSTATE_CARRY; \
+ } \
+ } while (0)
+# define SYSCALL_RET_SET_ON_PTRACE_EXIT
#else
# error "Do not know how to find your architecture's registers and syscalls"
#endif
--
2.43.0
next prev parent reply other threads:[~2026-09-01 22:08 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-01 22:08 [PATCH 0/2] sparc64: add seccomp filter support Stian Halseth
2026-09-01 22:08 ` [PATCH 1/2] " Stian Halseth
2026-09-01 22:08 ` Stian Halseth [this message]
2026-09-02 0:02 ` [PATCH 2/2] selftests/seccomp: add sparc64 support Kees Cook
2026-09-02 7:15 ` Stian Halseth
2026-09-02 7:21 ` Stian Halseth
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=20260901220811.3369666-3-stian@itx.no \
--to=stian@itx.no \
--cc=andreas@gaisler.com \
--cc=davem@davemloft.net \
--cc=glaubitz@physik.fu-berlin.de \
--cc=kees@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=oleg@redhat.com \
--cc=shuah@kernel.org \
--cc=sparclinux@vger.kernel.org \
--cc=wad@chromium.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 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.