From: HAGIO KAZUHITO(萩尾 一仁) <[email protected]>  wrote Tuesday, September 27, 
2022 9:58 AM
> 
> On 2022/09/26 16:24, [email protected] 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 <[email protected]>
> 
> 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 <[email protected]>
> Signed-off-by: Kazuhito Hagio <[email protected]>
> ---
>   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
_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to