From: Peter Krempa Date: Fri, 26 Oct 2012 12:37:26 +0000 (+0200) Subject: net: Mark network persistent when assigning persistent definition X-Git-Tag: CVE-2012-3411~178 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0211fd6e04cdc402da20818df54299c6ded3d3cb;p=thirdparty%2Flibvirt.git net: Mark network persistent when assigning persistent definition When assigning the new persistent definition for a transient network (thus making it persistent) the network needs to be marked persistent before actually atempting to assign the definition. --- diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index 68850e780a..c81ba88ccd 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -2822,7 +2822,7 @@ cleanup: static virNetworkPtr networkDefine(virConnectPtr conn, const char *xml) { struct network_driver *driver = conn->networkPrivateData; - virNetworkDefPtr def; + virNetworkDefPtr def = NULL; bool freeDef = true; virNetworkObjPtr network = NULL; virNetworkPtr ret = NULL; @@ -2835,11 +2835,17 @@ static virNetworkPtr networkDefine(virConnectPtr conn, const char *xml) { if (networkValidate(driver, def, false) < 0) goto cleanup; - if (!(network = virNetworkAssignDef(&driver->networks, def, false))) - goto cleanup; - freeDef = false; + if ((network = virNetworkFindByName(&driver->networks, def->name))) { + network->persistent = 1; + if (virNetworkObjAssignDef(network, def, false) < 0) + goto cleanup; + } else { + if (!(network = virNetworkAssignDef(&driver->networks, def, false))) + goto cleanup; + } - network->persistent = 1; + /* def was asigned */ + freeDef = false; if (virNetworkSaveConfig(driver->networkConfigDir, def) < 0) { virNetworkRemoveInactive(&driver->networks, network);