[PATCH v11 01/11] riscv: kexec_file: Fix crashk_low_res not exclude bug

Guo Ren guoren at kernel.org
Sun Mar 29 20:49:33 PDT 2026


On Sat, Mar 28, 2026 at 3:41 PM Jinjie Ruan <ruanjinjie at huawei.com> wrote:
>
> As done in commit 944a45abfabc ("arm64: kdump: Reimplement crashkernel=X")
> and commit 4831be702b95 ("arm64/kexec: Fix missing extra range for
> crashkres_low.") for arm64, while implementing crashkernel=X,[high,low],
> riscv should have excluded the "crashk_low_res" reserved ranges from
> the crash kernel memory to prevent them from being exported through
> /proc/vmcore, and the exclusion would need an extra crash_mem range.
>
> Cc: Guo Ren <guoren at kernel.org>
> Cc: Baoquan He <bhe at redhat.com>
> Fixes: 5882e5acf18d ("riscv: kdump: Implement crashkernel=X,[high,low]")
> Signed-off-by: Jinjie Ruan <ruanjinjie at huawei.com>
> ---
>  arch/riscv/kernel/machine_kexec_file.c | 14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/arch/riscv/kernel/machine_kexec_file.c b/arch/riscv/kernel/machine_kexec_file.c
> index 54e2d9552e93..3f7766057cac 100644
> --- a/arch/riscv/kernel/machine_kexec_file.c
> +++ b/arch/riscv/kernel/machine_kexec_file.c
> @@ -61,7 +61,7 @@ static int prepare_elf_headers(void **addr, unsigned long *sz)
>         unsigned int nr_ranges;
>         int ret;
>
> -       nr_ranges = 1; /* For exclusion of crashkernel region */
> +       nr_ranges = 2; /* For exclusion of crashkernel region */
>         walk_system_ram_res(0, -1, &nr_ranges, get_nr_ram_ranges_callback);
>
>         cmem = kmalloc_flex(*cmem, ranges, nr_ranges);
> @@ -76,8 +76,16 @@ static int prepare_elf_headers(void **addr, unsigned long *sz)
>
>         /* Exclude crashkernel region */
>         ret = crash_exclude_mem_range(cmem, crashk_res.start, crashk_res.end);
> -       if (!ret)
> -               ret = crash_prepare_elf64_headers(cmem, true, addr, sz);
> +       if (ret)
> +               goto out;
> +
> +       if (crashk_low_res.end) {
> +               ret = crash_exclude_mem_range(cmem, crashk_low_res.start, crashk_low_res.end);
Exclude crashk_low_res is reasonable, but have you tested this?

> +               if (ret)
> +                       goto out;
> +       }
> +
> +       ret = crash_prepare_elf64_headers(cmem, true, addr, sz);
>
>  out:
>         kfree(cmem);
> --
> 2.34.1
>


-- 
Best Regards
 Guo Ren



More information about the linux-riscv mailing list