[libvirt PATCH 08/11] libxl: allocate d_config

Peter Krempa pkrempa at redhat.com
Fri Aug 28 06:54:26 UTC 2020


On Thu, Aug 27, 2020 at 22:19:50 +0200, Ján Tomko wrote:
> clang reports:
> 
>   stack frame size of 2152 bytes in function 'libxlDomainStart'
> 
> This is mostly due to the d_config variable:
> 
>   sizeof(libxl_domain_config) = 1232
> 
> Use g_new0 to allocate it and bring the frame size down.
> 
> Signed-off-by: Ján Tomko <jtomko at redhat.com>
> ---
>  src/libxl/libxl_domain.c | 24 +++++++++++++-----------
>  1 file changed, 13 insertions(+), 11 deletions(-)
> 
> diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
> index de2059fa24..ae428fc7c1 100644
> --- a/src/libxl/libxl_domain.c
> +++ b/src/libxl/libxl_domain.c
> @@ -1267,7 +1267,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver,
>                   int restore_fd,
>                   uint32_t restore_ver LIBXL_DOMSTART_RESTORE_VER_ATTR)
>  {
> -    libxl_domain_config d_config;
> +    libxl_domain_config *d_config = NULL;
>      virDomainDefPtr def = NULL;
>      virObjectEventPtr event = NULL;
>      libxlSavefileHeader hdr;
> @@ -1288,7 +1288,9 @@ libxlDomainStart(libxlDriverPrivatePtr driver,
>      hostdev_flags |= VIR_HOSTDEV_SP_USB;
>  #endif
>  
> -    libxl_domain_config_init(&d_config);
> +    d_config = g_new0(libxl_domain_config, 1);
> +
> +    libxl_domain_config_init(d_config);

[...]

> @@ -1523,7 +1525,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver,
>      libxlDomainCleanup(driver, vm);
>  
>   cleanup:
> -    libxl_domain_config_dispose(&d_config);
> +    libxl_domain_config_dispose(d_config);

Since this was working properly on a pointer to a stack'd variable it
means that libxl_domain_config_dispose isn't freeing it. So you should
free the container too.

>      VIR_FREE(config_json);
>      VIR_FREE(dom_xml);
>      VIR_FREE(managed_save_path);
> -- 
> 2.26.2
> 




More information about the libvir-list mailing list