libxl: Don't segfault on soft-reset failure
authorJason Andryuk <jandryuk@gmail.com>
Wed, 6 Apr 2022 08:19:33 +0000 (10:19 +0200)
committerJan Beulich <jbeulich@suse.com>
Wed, 6 Apr 2022 08:19:33 +0000 (10:19 +0200)
commitc3cf5d0f3d173b59e09642e278f53820a52f3cef
tree76a5b765385367e3788696ad570a577132c38238
parent2b6badd63439f5ad774b1cad0958850c2b3975e6
libxl: Don't segfault on soft-reset failure

If domain_soft_reset_cb can't rename the save file, it doesn't call
initiate_domain_create() and calls domcreate_complete().

Skipping initiate_domain_create() means dcs->console_wait is
uninitialized and all 0s.

We have:
  domcreate_complete()
    libxl__xswait_stop()
      libxl__ev_xswatch_deregister().

The uninitialized slotnum 0 is considered valid (-1 is the invalid
sentinel), so the NULL pointer path to passed to xs_unwatch() which
segfaults.

libxl__ev_xswatch_deregister:watch w=0x12bc250 wpath=(null) token=0/0: deregister slotnum=0

Move dcs->console_xswait initialization into the callers of
initiate_domain_create, do_domain_create() and do_domain_soft_reset(),
so it is initialized along with the other dcs state.

Fixes: c57e6ebd8c3e ("(lib)xl: soft reset support")
Signed-off-by: Jason Andryuk <jandryuk@gmail.com>
Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
master commit: d2ecf97f911fc00a85b34b70ca311b5d355a9756
master date: 2022-04-01 17:01:57 +0100
tools/libs/light/libxl_create.c