[PATCH v6 1/6] arm64: ptrace: add PTRACE_SET_SYSCALL
will.deacon at arm.com
Tue Aug 26 10:46:38 PDT 2014
On Fri, Aug 22, 2014 at 01:19:13AM +0100, AKASHI Takahiro wrote:
> On 08/22/2014 01:47 AM, Kees Cook wrote:
> > On Thu, Aug 21, 2014 at 3:56 AM, AKASHI Takahiro
> > <takahiro.akashi at linaro.org> wrote:
> >> To allow tracer to be able to change/skip a system call by re-writing
> >> a syscall number, there are several approaches:
> >> (1) modify x8 register with ptrace(PTRACE_SETREGSET), and handle this case
> >> later on in syscall_trace_enter(), or
> >> (2) support ptrace(PTRACE_SET_SYSCALL) as on arm
> >> Thinking of the fact that user_pt_regs doesn't expose 'syscallno' to
> >> tracer as well as that secure_computing() expects a changed syscall number
> >> to be visible, especially case of -1, before this function returns in
> >> syscall_trace_enter(), we'd better take (2).
> >> Signed-off-by: AKASHI Takahiro <takahiro.akashi at linaro.org>
> > Thanks, I like having this on both arm and arm64.
> Yeah, having this simplified the code of syscall_trace_enter() a bit, but
> also imposes some restriction on arm64, too.
> > I wonder if other archs should add this option too.
> Do you think so? I assumed that SET_SYSCALL is to be avoided if possible.
> I also think that SET_SYSCALL should take an extra argument for a return value
> just in case of -1 (or we have SKIP_SYSCALL?).
I think we should propose this as a new request in the generic ptrace code.
We can have an architecture-hook for actually setting the syscall, and allow
architectures to define their own implementation of the request so they can
be moved over one by one.
More information about the linux-arm-kernel