From e703039c203e9dd2dac97291f9c30098efe542a0 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Tue, 29 Aug 2017 18:11:08 +0200 Subject: [PATCH] lxcStateInitialize: Don't leak driver's caps Funny thing. So when initializing LXC driver's capabilities, firstly the virLXCDriverGetCapabilities() is called. This creates new capabilities, stores them under driver->caps, ref() them and return them. However, the return value is ignored. Secondly, the function is called yet again and since we have driver->caps set, they are ref()-ed again an returned. So in the end, driver's capabilities have refcount of three when in fact they should have refcount of one. Signed-off-by: Michal Privoznik --- src/lxc/lxc_driver.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 6eb88b0bac..784edad396 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -1660,7 +1660,7 @@ static int lxcStateInitialize(bool privileged, if (!(lxc_driver->hostdevMgr = virHostdevManagerGetDefault())) goto cleanup; - if ((virLXCDriverGetCapabilities(lxc_driver, true)) == NULL) + if (!(caps = virLXCDriverGetCapabilities(lxc_driver, true))) goto cleanup; if (!(lxc_driver->xmlopt = lxcDomainXMLConfInit())) @@ -1669,9 +1669,6 @@ static int lxcStateInitialize(bool privileged, if (!(lxc_driver->closeCallbacks = virCloseCallbacksNew())) goto cleanup; - if (!(caps = virLXCDriverGetCapabilities(lxc_driver, false))) - goto cleanup; - if (virFileMakePath(cfg->stateDir) < 0) { virReportSystemError(errno, _("Failed to mkdir %s"), @@ -1700,6 +1697,7 @@ static int lxcStateInitialize(bool privileged, goto cleanup; virNWFilterRegisterCallbackDriver(&lxcCallbackDriver); + virObjectUnref(caps); return 0; cleanup: -- GitLab