diff mbox

xl: Fix assertion on domain reboot with new configuration

Message ID 1485786798-9566-1-git-send-email-fatih.acar@gandi.net (mailing list archive)
State New, archived
Headers show

Commit Message

Fatih Acar Jan. 30, 2017, 2:33 p.m. UTC
libxl_domain_build_info_dispose is not resetting the type field to LIBXL_DOMAIN_TYPE_INVALID.
Instead, it is memseting the struct to 0 thus when libxl_domain_build_info_init_type is called
after a dispose on the same struct, an assertion is triggered because type != LIBXL_DOMAIN_TYPE_INVALID.
Calling libxl_domain_build_info_init makes sure the type field is correctly initialized.

Signed-off-by: Fatih Acar <fatih.acar@gandi.net>
Signed-off-by: Nikita Kozlov <nikita.kozlov@gandi.net>
Signed-off-by: Vincent Legout <vincent.legout@gandi.net>
Signed-off-by: Baptiste Daroussin <baptiste.daroussin@gandi.net>
---
 tools/libxl/xl_cmdimpl.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Wei Liu Feb. 2, 2017, 11:26 a.m. UTC | #1
On Mon, Jan 30, 2017 at 03:33:18PM +0100, Fatih Acar wrote:
> libxl_domain_build_info_dispose is not resetting the type field to LIBXL_DOMAIN_TYPE_INVALID.
> Instead, it is memseting the struct to 0 thus when libxl_domain_build_info_init_type is called
> after a dispose on the same struct, an assertion is triggered because type != LIBXL_DOMAIN_TYPE_INVALID.
> Calling libxl_domain_build_info_init makes sure the type field is correctly initialized.
> 
> Signed-off-by: Fatih Acar <fatih.acar@gandi.net>
> Signed-off-by: Nikita Kozlov <nikita.kozlov@gandi.net>
> Signed-off-by: Vincent Legout <vincent.legout@gandi.net>
> Signed-off-by: Baptiste Daroussin <baptiste.daroussin@gandi.net>

Acked-by: Wei Liu <wei.liu2@citrix.com>

> ---
>  tools/libxl/xl_cmdimpl.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> index 7e8a8ae..196b8a6 100644
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -2535,6 +2535,7 @@ static void reload_domain_config(uint32_t domid,
>      if (t_len > 0) {
>          LOG("\"xl\" configuration found, using it\n");
>          libxl_domain_config_dispose(d_config);
> +        libxl_domain_config_init(d_config);
>          parse_config_data("<updated>", (const char *)t_data,
>                            t_len, d_config);
>          free(t_data);
> -- 
> bapt is my cto
>
Wei Liu Feb. 2, 2017, 12:39 p.m. UTC | #2
On Thu, Feb 02, 2017 at 11:26:16AM +0000, Wei Liu wrote:
> On Mon, Jan 30, 2017 at 03:33:18PM +0100, Fatih Acar wrote:
> > libxl_domain_build_info_dispose is not resetting the type field to LIBXL_DOMAIN_TYPE_INVALID.
> > Instead, it is memseting the struct to 0 thus when libxl_domain_build_info_init_type is called
> > after a dispose on the same struct, an assertion is triggered because type != LIBXL_DOMAIN_TYPE_INVALID.
> > Calling libxl_domain_build_info_init makes sure the type field is correctly initialized.
> > 
> > Signed-off-by: Fatih Acar <fatih.acar@gandi.net>
> > Signed-off-by: Nikita Kozlov <nikita.kozlov@gandi.net>
> > Signed-off-by: Vincent Legout <vincent.legout@gandi.net>
> > Signed-off-by: Baptiste Daroussin <baptiste.daroussin@gandi.net>
> 
> Acked-by: Wei Liu <wei.liu2@citrix.com>

Applied.

Ian, this should be backported to all supported versions (>= 4.5 IIRC).

Wei.
diff mbox

Patch

diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index 7e8a8ae..196b8a6 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -2535,6 +2535,7 @@  static void reload_domain_config(uint32_t domid,
     if (t_len > 0) {
         LOG("\"xl\" configuration found, using it\n");
         libxl_domain_config_dispose(d_config);
+        libxl_domain_config_init(d_config);
         parse_config_data("<updated>", (const char *)t_data,
                           t_len, d_config);
         free(t_data);