[PATCH v2] riscv: Ensure the value of FP registers in the core dump file is up to date
Jisheng Zhang
jszhang3 at mail.ustc.edu.cn
Sun Aug 8 09:47:26 PDT 2021
On Tue, 3 Aug 2021 17:27:51 +0800
Vincent Chen <vincent.chen at sifive.com> wrote:
> The value of FP registers in the core dump file comes from the
> thread.fstate. However, kernel saves the FP registers to the thread.fstate
> only before scheduling out the process. If no process switch happens
> during the exception handling process, kernel will not have a chance to
> save the latest value of FP registers to thread.fstate. It will cause the
> value of FP registers in the core dump file may be incorrect. To solve this
> problem, this patch force lets kernel save the FP register into the
> thread.fstate if the target task_struct equals the current.
Nice catch! I think there's another case too: since last kernel save, the FP
registers has been modified by the userspace, we also need to force fstate_save()
This patch fixes both cases.
>
> Signed-off-by: Vincent Chen <vincent.chen at sifive.com>
Reviewed-by: Jisheng Zhang <jszhang at kernel.org>
>
> ---
> Changes since the v1 patch
> 1. Include switch_to.h to avoid compiling error.
>
> ---
> arch/riscv/kernel/ptrace.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/arch/riscv/kernel/ptrace.c b/arch/riscv/kernel/ptrace.c
> index 1a85305720e8..9c0511119bad 100644
> --- a/arch/riscv/kernel/ptrace.c
> +++ b/arch/riscv/kernel/ptrace.c
> @@ -10,6 +10,7 @@
> #include <asm/ptrace.h>
> #include <asm/syscall.h>
> #include <asm/thread_info.h>
> +#include <asm/switch_to.h>
> #include <linux/audit.h>
> #include <linux/ptrace.h>
> #include <linux/elf.h>
> @@ -56,6 +57,9 @@ static int riscv_fpr_get(struct task_struct *target,
> {
> struct __riscv_d_ext_state *fstate = &target->thread.fstate;
>
> + if (target == current)
> + fstate_save(current, task_pt_regs(current));
> +
> membuf_write(&to, fstate, offsetof(struct __riscv_d_ext_state, fcsr));
> membuf_store(&to, fstate->fcsr);
> return membuf_zero(&to, 4); // explicitly pad
More information about the linux-riscv
mailing list