From: Adam Julis Date: Tue, 15 Oct 2024 09:51:38 +0000 (+0200) Subject: lxc: fix variable storage order before call X-Git-Tag: v10.9.0-rc1~37 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0fd36e96563277c5073e008c6e08a1bdc6a2e929;p=thirdparty%2Flibvirt.git lxc: fix variable storage order before call virDomainConfNWFilterInstantiate() was called without updated net->ifname, it caused in some cases throwing error message. If function failed, change is reverted. Resolves: https://gitlab.com/libvirt/libvirt/-/issues/658 Signed-off-by: Adam Julis Reviewed-by: Jiri Denemark --- diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c index dc6f4fc03c..083ab83ec6 100644 --- a/src/lxc/lxc_process.c +++ b/src/lxc/lxc_process.c @@ -271,6 +271,7 @@ virLXCProcessSetupInterfaceTap(virDomainDef *vm, { g_autofree char *parentVeth = NULL; g_autofree char *containerVeth = NULL; + g_autofree char *backupIfname = NULL; const virNetDevVPortProfile *vport = virDomainNetGetActualVirtPortProfile(net); VIR_DEBUG("calling vethCreate()"); @@ -315,13 +316,16 @@ virLXCProcessSetupInterfaceTap(virDomainDef *vm, return NULL; } + /* success almost guaranteed, next function needs updated net->ifname */ + backupIfname = g_steal_pointer(&net->ifname); + net->ifname = g_steal_pointer(&parentVeth); + if (net->filter && - virDomainConfNWFilterInstantiate(vm->name, vm->uuid, net, false) < 0) + virDomainConfNWFilterInstantiate(vm->name, vm->uuid, net, false) < 0) { + g_free(net->ifname); + net->ifname = g_steal_pointer(&backupIfname); return NULL; - - /* success is guaranteed, so update the interface object */ - g_free(net->ifname); - net->ifname = g_steal_pointer(&parentVeth); + } return g_steal_pointer(&containerVeth); }