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