[PATCH v2 0/2] Optimize the allocation of vector regset
Andy Chiu
andybnac at gmail.com
Fri Oct 17 14:50:22 PDT 2025
On Mon, Oct 13, 2025 at 4:13 AM Yong-Xuan Wang <yongxuan.wang at sifive.com> 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 <andybnac at gmail.com>
[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
>
More information about the linux-riscv
mailing list