On 2024-10-27 23:56, Thomas Gleixner wrote: > On Sun, Oct 27 2024 at 23:29, Celeste Liu wrote: >> On 2024-10-27 04:21, Thomas Gleixner wrote: >>> The real problem is that orig_a0 is not exposed in the user view of the >>> registers. Changing that struct breaks the existing applications >>> obviously. >>> >>> But you can expose it without changing the struct by exposing a regset >>> for orig_a0 which allows you to read and write it similar to what ARM64 >>> does for the syscall number. >> >> If we add something like NT_SYSCALL_NR to UAPI, it cannot solve anything: We >> already have PTRACE_GET_SYSCALL_INFO to get syscall number, which was introduced >> in 5.3 kernel. The problem is only in the kernel before 5.3. So we can't fix >> this issue unless we also backport NT_SYSCALL_NR to 4.19 LTS. But if we can >> backport it, we can backport PTRACE_GET_SYSCALL_INFO directly instead. > > PTRACE_GET_SYSCALL_INFO only solves half of the problem. It correctly > returns orig_a0, but there is no way to modify orig_a0, which is > required to change arg0. > > On x86 AX contains the syscall number and is used for the return > value. So the tracer has do modify orig_AX when it wants to change the > syscall number. > > Equivalently you need to be able to modify orig_a0 for changing arg0, > no? Ok. Greg, could you accept a backport a new API parameter for PTRACE_GETREGSET/PTRACE_SETREGSET to 4.19 LTS branch? > > Thanks, > > tglx > >