Messages in this thread | | | Date | Sun, 21 Aug 2011 15:43:52 +0100 | From | Al Viro <> | Subject | Re: SYSCALL, ptrace and syscall restart breakages (Re: [RFC] weird crap with vdso on uml/i386) |
| |
On Sun, Aug 21, 2011 at 07:24:35AM -0400, Andrew Lutomirski wrote:
> I don't see the point of all this hackery at all. sysenter/sysexit > indeed screws up some registers, but we can return on the iret path in > the case of restart.
We *do* return on iret path in case of restart, TYVM.
> So why do we lie to ptrace (and iret!) at all? Why not just fill in > pt_regs with the registers as they were (at least the > non-clobbered-by-sysenter ones), set the actual C parameters correctly > to contain the six arguments (in rdi, rsi, etc.), do the syscall, and > return back to userspace without any funny business? Is there some > ABI reason that, once we've started lying to tracers, we have to keep > doing so?
We do not lie to ptrace and iret. At all. We do just what you have described. And fuck up when restart returns us to the SYSCALL / SYSENTER instruction again, which expects the different calling conventions, so the values arranged in registers in the way int 0x80 would expect do us no good.
| |