From: Oleksandr Grytsov Date: Tue, 12 Sep 2017 13:31:58 +0000 (+0300) Subject: libxl: fix memory leak in libxl__colo_save_setup X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~1439 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=a23173381bed1ab35025605a9794b937992a8b95;p=xen.git libxl: fix memory leak in libxl__colo_save_setup Getting nic list in case userspace proxy is called without freeing. The fix is to use cds->nics to keep nic list. cds->nics will be freed in devices_teardown_cb. Signed-off-by: Oleksandr Grytsov Acked-by: Wei Liu --- diff --git a/tools/libxl/libxl_colo_save.c b/tools/libxl/libxl_colo_save.c index bf68198251..43f7dbeca9 100644 --- a/tools/libxl/libxl_colo_save.c +++ b/tools/libxl/libxl_colo_save.c @@ -86,7 +86,6 @@ void libxl__colo_save_setup(libxl__egc *egc, libxl__colo_save_state *css) libxl__checkpoint_devices_state *const cds = &dss->cds; libxl__srm_save_autogen_callbacks *const callbacks = &dss->sws.shs.callbacks.save.a; - libxl_device_nic *nics; STATE_AO_GC(dss->ao); @@ -122,10 +121,12 @@ void libxl__colo_save_setup(libxl__egc *egc, libxl__colo_save_state *css) cds->device_kind_flags = (1 << LIBXL__DEVICE_KIND_VBD); /* Use this args we can connect to qemu colo-compare */ - nics = libxl__device_list(gc, &libxl__nic_devtype, - cds->domid, "vif", &cds->num_nics); - css->cps.checkpoint_host = nics->colo_checkpoint_host; - css->cps.checkpoint_port = nics->colo_checkpoint_port; + cds->nics = libxl__device_list(gc, &libxl__nic_devtype, + cds->domid, "vif", &cds->num_nics); + if (cds->num_nics > 0) { + css->cps.checkpoint_host = cds->nics[0].colo_checkpoint_host; + css->cps.checkpoint_port = cds->nics[0].colo_checkpoint_port; + } } else { cds->device_kind_flags = (1 << LIBXL__DEVICE_KIND_VIF) | (1 << LIBXL__DEVICE_KIND_VBD);