lkml.org 
[lkml]   [2017]   [Mar]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: Compat 32-bit syscall entry from 64-bit task!?
On Wed, Mar 08, 2017 at 08:39:55PM -0800, Andrew Lutomirski wrote:
> On Wed, Mar 8, 2017 at 3:41 PM, Dmitry V. Levin wrote:
[...]
> > Is there any progress with this (or any alternative) solution?
> >
> > I see the kernel side has changed a bit, and the strace part
> > is in a better shape than 5 years ago (although I'm biased of course),
> > but I don't see any kernel interface that would allow strace to reliably
> > recognize this 0x80 case.
>
> I am strongly opposed to fudging registers to half-arsedly slightly
> improve the epicly crappy ptrace(2) interface for syscalls.
>
> To fix this right, please just add PTRACE_GET_SYSCALL_INFO or similar
> to, in one shot, read out all the syscall details. This means: arch,
> no, arg0..arg5, and *whether it's entry or exit*. I propose returning
> this structure:
>
> struct ptrace_syscall_info {
> u8 op; /* 0 for entry, 1 for exit */
> u8 pad0;
> u16 pad1;
> u32 pad2;
> union {
> struct seccomp_data syscall_entry;
> s64 syscall_exit_retval;
> };
> };
>
> because struct seccomp_data already gets this right. There's plenty
> of opportunity to fine-tune this. Now it works on all architectures.

Unfortunately, the API is missing.

Unlike syscall_get_nr(), syscall_get_arch() works with the current task
only so there is no API to get the arch identifier for the given task
that would work on all architectures.


--
ldv
[unhandled content-type:application/pgp-signature]
\
 
 \ /
  Last update: 2017-03-14 03:58    [W:0.165 / U:50.116 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site