[PATCH] riscv/entry: get correct syscall number from syscall_get_nr()
Celeste Liu
coelacanthushex at gmail.com
Sun Oct 27 10:01:47 PDT 2024
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
>
>
More information about the linux-riscv
mailing list