[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4536aca6-c430-4cf9-a98f-8282c7378955@zytor.com>
Date: Thu, 9 Jan 2025 19:15:09 -0800
From: "H. Peter Anvin" <hpa@...or.com>
To: "Dmitry V. Levin" <ldv@...ace.io>, Oleg Nesterov <oleg@...hat.com>
Cc: Eugene Syromyatnikov <evgsyr@...il.com>,
Mike Frysinger <vapier@...too.org>, Renzo Davoli <renzo@...unibo.it>,
Davide Berardi <berardi.dav@...il.com>, strace-devel@...ts.strace.io,
Vineet Gupta <vgupta@...nel.org>, Russell King <linux@...linux.org.uk>,
Catalin Marinas <catalin.marinas@....com>,
Will Deacon <will@...nel.org>, Guo Ren <guoren@...nel.org>,
Brian Cain <bcain@...cinc.com>, Huacai Chen <chenhuacai@...nel.org>,
WANG Xuerui <kernel@...0n.name>,
Geert Uytterhoeven <geert@...ux-m68k.org>,
Michal Simek <monstr@...str.eu>,
Thomas Bogendoerfer <tsbogend@...ha.franken.de>,
Dinh Nguyen <dinguyen@...nel.org>, Jonas Bonn <jonas@...thpole.se>,
Stefan Kristiansson <stefan.kristiansson@...nalahti.fi>,
Stafford Horne <shorne@...il.com>,
"James E.J. Bottomley" <James.Bottomley@...senPartnership.com>,
Helge Deller <deller@....de>, Michael Ellerman <mpe@...erman.id.au>,
Nicholas Piggin <npiggin@...il.com>,
Christophe Leroy <christophe.leroy@...roup.eu>,
Naveen N Rao <naveen@...nel.org>,
Madhavan Srinivasan <maddy@...ux.ibm.com>,
Paul Walmsley <paul.walmsley@...ive.com>,
Palmer Dabbelt
<palmer@...belt.com>,
Albert Ou <aou@...s.berkeley.edu>, Heiko Carstens <hca@...ux.ibm.com>,
Vasily Gorbik <gor@...ux.ibm.com>,
Alexander Gordeev <agordeev@...ux.ibm.com>,
Christian Borntraeger <borntraeger@...ux.ibm.com>,
Sven Schnelle <svens@...ux.ibm.com>,
Yoshinori Sato <ysato@...rs.osdn.me>, Rich Felker <dalias@...c.org>,
John Paul Adrian Glaubitz <glaubitz@...sik.fu-berlin.de>,
"David S. Miller" <davem@...emloft.net>,
Andreas Larsson <andreas@...sler.com>,
Richard Weinberger <richard@....at>,
Anton Ivanov <anton.ivanov@...bridgegreys.com>,
Johannes Berg <johannes@...solutions.net>,
Thomas Gleixner <tglx@...utronix.de>, Ingo Molnar <mingo@...hat.com>,
Borislav Petkov <bp@...en8.de>,
Dave Hansen <dave.hansen@...ux.intel.com>, x86@...nel.org,
Chris Zankel <chris@...kel.net>, Max Filippov <jcmvbkbc@...il.com>,
Arnd Bergmann <arnd@...db.de>, Shuah Khan <shuah@...nel.org>,
linux-snps-arc@...ts.infradead.org, linux-kernel@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org, linux-csky@...r.kernel.org,
linux-hexagon@...r.kernel.org, loongarch@...ts.linux.dev,
linux-m68k@...r.kernel.org, linux-mips@...r.kernel.org,
linux-openrisc@...r.kernel.org, linux-parisc@...r.kernel.org,
linuxppc-dev@...ts.ozlabs.org, linux-riscv@...ts.infradead.org,
linux-s390@...r.kernel.org, linux-sh@...r.kernel.org,
sparclinux@...r.kernel.org, linux-um@...ts.infradead.org,
linux-arch@...r.kernel.org, linux-kselftest@...r.kernel.org
Subject: Re: [PATCH 0/6] ptrace: introduce PTRACE_SET_SYSCALL_INFO API
This would seem like a very good idea. However, it is perhaps important
to realize that it doesn't fully eliminate the problems with 64-bit
arguments on 32-bit ABIs being handled differently (never mind
inconsistencies in system call ABIs etc.) There isn't all that much that
can be done about that directly, though.
-hpa
On 1/7/25 15:01, Dmitry V. Levin wrote:
> PTRACE_SET_SYSCALL_INFO is a generic ptrace API that complements
> PTRACE_GET_SYSCALL_INFO by letting the ptracer modify details of
> system calls the tracee is blocked in.
>
> This API allows ptracers to obtain and modify system call details
> in a straightforward and architecture-agnostic way.
>
> Current implementation supports changing only those bits of system call
> information that are used by strace, namely, syscall number, syscall
> arguments, and syscall return value.
>
> Support of changing additional details returned by PTRACE_GET_SYSCALL_INFO,
> such as instruction pointer and stack pointer, could be added later
> if needed, by re-using struct ptrace_syscall_info.reserved to specify
> the additional details that should be set. Currently, the reserved
> field of struct ptrace_syscall_info must be initialized with zeroes;
> arch, instruction_pointer, and stack_pointer fields are ignored.
>
> PTRACE_SET_SYSCALL_INFO currently supports only PTRACE_SYSCALL_INFO_ENTRY,
> PTRACE_SYSCALL_INFO_EXIT, and PTRACE_SYSCALL_INFO_SECCOMP operations.
> Other operations could be added later if needed.
>
> Ideally, PTRACE_SET_SYSCALL_INFO should have been introduced along with
> PTRACE_GET_SYSCALL_INFO, but it didn't happen. The last straw that
> convinced me to implement PTRACE_SET_SYSCALL_INFO was apparent failure
> to provide an API of changing the first system call argument on riscv
> architecture [1].
>
> ptrace(2) man page:
>
> long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
> ...
> PTRACE_SET_SYSCALL_INFO
> Modify information about the system call that caused the stop.
> The "data" argument is a pointer to struct ptrace_syscall_info
> that specifies the system call information to be set.
> The "addr" argument should be set to sizeof(struct ptrace_syscall_info)).
>
> [1] https://lore.kernel.org/all/59505464-c84a-403d-972f-d4b2055eeaac@gmail.com/
>
> Dmitry V. Levin (6):
> Revert "arch: remove unused function syscall_set_arguments()"
> syscall.h: add syscall_set_arguments() on remaining
> HAVE_ARCH_TRACEHOOK arches
> syscall.h: introduce syscall_set_nr()
> ptrace_get_syscall_info: factor out ptrace_get_syscall_info_op
> ptrace: introduce PTRACE_SET_SYSCALL_INFO request
> selftests/ptrace: add a test case for PTRACE_SET_SYSCALL_INFO
>
> arch/arc/include/asm/syscall.h | 20 +
> arch/arm/include/asm/syscall.h | 25 +
> arch/arm64/include/asm/syscall.h | 20 +
> arch/csky/include/asm/syscall.h | 13 +
> arch/hexagon/include/asm/syscall.h | 14 +
> arch/loongarch/include/asm/syscall.h | 15 +
> arch/m68k/include/asm/syscall.h | 7 +
> arch/microblaze/include/asm/syscall.h | 7 +
> arch/mips/include/asm/syscall.h | 53 +++
> arch/nios2/include/asm/syscall.h | 16 +
> arch/openrisc/include/asm/syscall.h | 13 +
> arch/parisc/include/asm/syscall.h | 19 +
> arch/powerpc/include/asm/syscall.h | 15 +
> arch/riscv/include/asm/syscall.h | 16 +
> arch/s390/include/asm/syscall.h | 19 +
> arch/sh/include/asm/syscall_32.h | 19 +
> arch/sparc/include/asm/syscall.h | 17 +
> arch/um/include/asm/syscall-generic.h | 19 +
> arch/x86/include/asm/syscall.h | 43 ++
> arch/xtensa/include/asm/syscall.h | 18 +
> include/asm-generic/syscall.h | 30 ++
> include/linux/ptrace.h | 3 +
> include/uapi/linux/ptrace.h | 3 +-
> kernel/ptrace.c | 154 ++++++-
> tools/testing/selftests/ptrace/Makefile | 2 +-
> .../selftests/ptrace/set_syscall_info.c | 436 ++++++++++++++++++
> 26 files changed, 994 insertions(+), 22 deletions(-)
> create mode 100644 tools/testing/selftests/ptrace/set_syscall_info.c
>
Powered by blists - more mailing lists