[PATCH] makedumpfile: xen: Fix get_xen_basic_info_x86_64: Can't get the symbol of xenheap_phys_end.

dietmar.hahn at fujitsu.com dietmar.hahn at fujitsu.com
Tue Sep 27 02:13:31 PDT 2022


From: HAGIO KAZUHITO(萩尾 一仁) <k-hagio-ab at nec.com>  wrote Tuesday, September 27, 2022 9:58 AM
> 
> On 2022/09/26 16:24, dietmar.hahn at fujitsu.com wrote:
> > Hi,
> > I have a Linux-dom0 running with Xen. The extraction of the vmcore via
> > makdumpfile shows the message:
> > get_xen_basic_info_x86_64: Can't get the symbol of xenheap_phys_end.
> >
> > The commit 2651d571 changed the behaviour of init_xen_crash_info().
> > With
> > -       return TRUE;
> > +       ret = TRUE;
> > +
> > +out_error:
> > +       free(buf);
> > the buffer is released but it's still used because of
> > info->xen_crash_info.com = buf;
> > This leads to random data in the buffer and later to the mentioned
> > error.
> 
> Thank you for the report and patch, I missed that at review completely..
> 
> >
> > With the change back the memory is not released.
> > But I'm not familiar enough with code to decide where to do this.
> 
> I've tweaked the patch, does this work for you?

Yes, much better.
My test cases are working.
Many thanks!

Dietmar.

> 
> Thanks,
> Kazu
> 
> --
>  From d2c336e0c1bb765675056ca942a884014c257f9a Mon Sep 17 00:00:00 2001
> Subject: [PATCH] xen: Fix wrong free issue in init_xen_crash_info()
> 
> From: Dietmar Hahn <dietmar.hahn at fujitsu.com>
> 
> The commit 2651d5719a21 ("[PATCH 11/14] fix memory leak in
> init_xen_crash_info()") changed the behaviour of the function and the
> buf variable is always released, but it's still used later when
> returning TRUE.  Without the patch, this leads to random data in the
> buffer and later to the following error:
> 
>    get_xen_basic_info_x86_64: Can't get the symbol of xenheap_phys_end.
> 
> Fixes: 2651d5719a21 ("[PATCH 11/14] fix memory leak in init_xen_crash_info()")
> Signed-off-by: Dietmar Hahn <dietmar.hahn at fujitsu.com>
> Signed-off-by: Kazuhito Hagio <k-hagio-ab at nec.com>
> ---
>   makedumpfile.c | 7 ++++---
>   1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/makedumpfile.c b/makedumpfile.c
> index 65d1c7c2f02c..ff821ebd3eb0 100644
> --- a/makedumpfile.c
> +++ b/makedumpfile.c
> @@ -9668,7 +9668,6 @@ init_xen_crash_info(void)
>   {
>   	off_t		offset_xen_crash_info;
>   	unsigned long	size_xen_crash_info;
> -	int		ret = FALSE;
>   	void		*buf;
> 
>   	get_xen_crash_info(&offset_xen_crash_info, &size_xen_crash_info);
> @@ -9710,11 +9709,11 @@ init_xen_crash_info(void)
>   	else
>   		info->xen_crash_info_v = 0;
> 
> -	ret = TRUE;
> +	return TRUE;
> 
>   out_error:
>   	free(buf);
> -	return ret;
> +	return FALSE;
>   }
> 
>   int
> @@ -12377,6 +12376,8 @@ out:
>   			free(info->dump_header);
>   		if (info->splitting_info != NULL)
>   			free(info->splitting_info);
> +		if (info->xen_crash_info.com != NULL)
> +			free(info->xen_crash_info.com);
>   		if (info->p2m_mfn_frame_list != NULL)
>   			free(info->p2m_mfn_frame_list);
>   		if (info->page_buf != NULL)
> --
> 2.31.1


More information about the kexec mailing list