[PATCH] sadump, kaslr: fix failure of calculating kaslr_offset

HAGIO KAZUHITO(萩尾 一仁) k-hagio-ab at nec.com
Tue Jan 25 17:43:31 PST 2022


-----Original Message-----
> On kernels v5.8 or later, makedumpfile fails for memory dumps in the
> sadump-related formats as follows:
> 
>     # makedumpfile -f -l -d 31 -x ./vmlinux /dev/sdd4 /root/vmcore-ld31
>     __vtop4_x86_64: Can't get a valid pud_pte.
>     ...110 lines of the same message...
>     __vtop4_x86_64: Can't get a valid pud_pte.
>     calc_kaslr_offset: failed to calculate kaslr_offset and phys_base; default to 0
>     readmem: type_addr: 1, addr:ffffffff85411858, size:8
>     __vtop4_x86_64: Can't get pgd (page_dir:ffffffff85411858).
>     readmem: Can't convert a virtual address(ffffffff059be980) to physical address.
>     readmem: type_addr: 0, addr:ffffffff059be980, size:1024
>     cpu_online_mask_init: Can't read cpu_online_mask memory.
> 
>     makedumpfile Failed.
> 
> This is caused by the kernel commit 9d06c4027f21 ("x86/entry: Convert
> Divide Error to IDTENTRY") that renamed divide_error to
> asm_exc_divide_error, breaking logic for calculating kaslr offset.
> 
> Fix this by adding initialization of asm_exc_divide_error.
> 
> Signed-off-by: HATAYAMA Daisuke <d.hatayama at fujitsu.com>
> ---
>  makedumpfile.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/makedumpfile.c b/makedumpfile.c
> index a51bdaf..7ed9756 100644
> --- a/makedumpfile.c
> +++ b/makedumpfile.c
> @@ -1667,6 +1667,8 @@ get_symbol_info(void)
>  	SYMBOL_INIT(cur_cpu_spec, "cur_cpu_spec");
> 
>  	SYMBOL_INIT(divide_error, "divide_error");
> +	if (SYMBOL(divide_error) == NOT_FOUND_SYMBOL)
> +		SYMBOL_INIT(divide_error, "asm_exc_divide_error");
>  	SYMBOL_INIT(idt_table, "idt_table");
>  	SYMBOL_INIT(saved_command_line, "saved_command_line");
>  	SYMBOL_INIT(pti_init, "pti_init");
> --
> 2.31.1

Thanks, applied.
https://github.com/makedumpfile/makedumpfile/commit/59b1726fbcc251155140c8a1972384498fee4daf

Kazu




More information about the kexec mailing list