On Tue, Feb 22, 2022 at 10:19 AM HAGIO KAZUHITO(萩尾 一仁)
<k-hagio-ab(a)nec.com> wrote:
Hi Pingfan,
thanks for the patch.
-----Original Message-----
> After kernel commit e2a073dde921 ("arm64: omit [_text, _stext) from
> permanent kernel mapping"), the range [_text, _stext] is reclaimed. But
> the current crash code still assumes kernel starting from "_text".
>
> This change only affects the vmalloced area on arm64 and may result a
> false in arm64_IS_VMALLOC_ADDR().
>
> Since vmcore has no extra information about this trival change, it can
> only be deduced from kernel version, which means ms->kimage_text can not
> be correctly initialized until kernel_init() finishes. This is fine
> since there is no access to vmalloced area at this early stage.
>
> Signed-off-by: Pingfan Liu <piliu(a)redhat.com>
> ---
> arm64.c | 17 +++++++++++++++++
> defs.h | 1 +
> kernel.c | 3 +++
> 3 files changed, 21 insertions(+)
>
> diff --git a/arm64.c b/arm64.c
> index 4f2c2b5..4aa971c 100644
> --- a/arm64.c
> +++ b/arm64.c
> @@ -92,6 +92,21 @@ static void arm64_calc_VA_BITS(void);
> static int arm64_is_uvaddr(ulong, struct task_context *);
> static void arm64_calc_KERNELPACMASK(void);
>
> +/* called by kernel_init() */
> +static void arm64_post_kernel_init(void)
> +{
> + struct machine_specific *ms = machdep->machspec;
> + struct syment *sp;
> +
> + if (THIS_KERNEL_VERSION >= LINUX(5,11,0))
> + sp = kernel_symbol_search("_stext");
> + else
> + sp = kernel_symbol_search("_text");
> +
> + ms->kimage_text = (sp ? sp->value : 0);
> + sp = kernel_symbol_search("_end");
> + ms->kimage_end = (sp ? sp->value : 0);
> +}
>
> /*
> * Do all necessary machine-specific setup here. This is called several times
> @@ -104,6 +119,7 @@ arm64_init(int when)
> char *string;
> struct machine_specific *ms;
>
> + arch_post_kernel_init = arm64_post_kernel_init;
Why is the arch_post_kernel_init needed, i.e. can't we put it in
machdep_init(POST_GDB)?
Yeah, it is better to handle this issue in that place.
Thanks for the suggestion and I will send out V2 soon.
Regards,
Pingfan