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? Thanks, tglx