[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20200601095925.GZ5031@arm.com>
Date: Mon, 1 Jun 2020 10:59:25 +0100
From: Dave Martin <Dave.Martin@....com>
To: Keno Fischer <keno@...iacomputing.com>
Cc: Kyle Huey <khuey@...nos.co>,
Catalin Marinas <catalin.marinas@....com>,
Oleg Nesterov <oleg@...hat.com>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
Will Deacon <will@...nel.org>,
linux-arm-kernel@...ts.infradead.org
Subject: Re: arm64: Register modification during syscall entry/exit stop
On Mon, Jun 01, 2020 at 05:40:28AM -0400, Keno Fischer wrote:
> On Mon, Jun 1, 2020 at 5:23 AM Dave Martin <Dave.Martin@....com> wrote:
> > > > Can't PTRACE_SYSEMU be emulated by using PTRACE_SYSCALL, cancelling the
> > > > syscall at the syscall enter stop, then modifying the regs at the
> > > > syscall exit stop?
> > >
> > > Yes, it can. The idea behind SYSEMU is to be able to save half the
> > > ptrace traps that would require, in theory making the ptracer
> > > a decent amount faster. That said, the x7 issue is orthogonal to
> > > SYSEMU, you'd have the same issues if you used PTRACE_SYSCALL.
> >
> > Right, I just wondered whether there was some deeper difference between
> > the two approaches.
>
> You're asking about a new regset vs trying to do it via ptrace option?
I meant SYSEMU versus SYSCALL + cancellation and emulating the syscall
at the syscall exit stop.
i.e., I was trying to understand whether SYSEMU is just a convenience,
or does some magic that can't be reproduced by other means.
> I don't think there's anything a ptrace option can do that a new regset
> that replicates the same registers (I'm gonna propose adding orig_x0,
> while we're at it and changing the x0 semantics a bit, will have
> those details with the patch) wouldn't be able to do . The reason I
> originally thought it might have to be a ptrace option is because
> the register modification currently gets applied in the syscall entry
> code to the actual regs struct, so I thought you might have to know
> to preserve those registers. However, then I realized that you could
> just change the regset accessors to emulate the old behavior, since
> we do already store all the required information (what kind of stop
> we're currently at) in order to be able to answer the ptrace
> informational queries. So doing that it probably just all around
> easier. I guess NT_PRSTATUS might also rot, but I guess strace
> doesn't really have to stop using it, since it doesn't care about
> the x7 value nor does it need to modify it.
I think NT_PRSTATUS probably doesn't need to change.
Having a duplicate regset feels like a worse outcome that having a new
ptrace option. Undocumentedly different things already happen to the
regs depending on how the tracee stopped, so adding a new special case
doesn't seem to justify creating a new regset.
Cheers
---Dave
Powered by blists - more mailing lists