On Mon, Oct 13, 2025 at 4:13 AM Yong-Xuan Wang <[email protected]> wrote:
>
> The vector regset uses the maximum possible vlenb 8192 to allocate a
> 2^18 bytes buffer to copy the vector register. But most platforms
> don’t support the largest vlenb.
>
> The regset has 2 users, ptrace syscall and coredump. When handling the
> PTRACE_GETREGSET requests from ptrace syscall, Linux will prepare a
> kernel buffer which size is min(user buffer size, limit). A malicious
> user process might overwhelm a memory-constrainted system when the
> buffer limit is very large. The coredump uses regset_get_alloc() to
> get the context of vector register. But this API allocates buffer
> before checking whether the target process uses vector extension, this
> wastes time to prepare a large memory buffer.
>
> The buffer limit can be determined after getting platform vlenb in the
> early boot stage, this can let the regset buffer match real hardware
> limits. Also add .active callbacks to let the coredump skip vector part
> when target process doesn't use it.
>
> After this patchset, userspace process needs 2 ptrace syscalls to
> retrieve the vector regset with PTRACE_GETREGSET. The first ptrace call
> only reads the header to get the vlenb information. Then prepare a
> suitable buffer to get the register context. The new vector ptrace
> kselftest demonstrates it.

For the entire series:
Tested-by: Andy Chiu <[email protected]>

[on rv64 v enabled qemu]

Thanks!

>
> ---
> v2:
> - fix issues in vector ptrace kselftest (Andy)
>
> Yong-Xuan Wang (2):
>   riscv: ptrace: Optimize the allocation of vector regset
>   selftests: riscv: Add test for the Vector ptrace interface
>
>  arch/riscv/include/asm/vector.h               |   1 +
>  arch/riscv/kernel/ptrace.c                    |  24 +++-
>  arch/riscv/kernel/vector.c                    |   2 +
>  tools/testing/selftests/riscv/vector/Makefile |   5 +-
>  .../selftests/riscv/vector/vstate_ptrace.c    | 134 ++++++++++++++++++
>  5 files changed, 162 insertions(+), 4 deletions(-)
>  create mode 100644 tools/testing/selftests/riscv/vector/vstate_ptrace.c
>
> --
> 2.43.0
>

Reply via email to