From 0fd36e96563277c5073e008c6e08a1bdc6a2e929 Mon Sep 17 00:00:00 2001 From: Adam Julis Date: Tue, 15 Oct 2024 11:51:38 +0200 Subject: [PATCH] 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 --- src/lxc/lxc_process.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) 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,14 +316,17 @@ virLXCProcessSetupInterfaceTap(virDomainDef *vm, return NULL; } - if (net->filter && - virDomainConfNWFilterInstantiate(vm->name, vm->uuid, net, false) < 0) - return NULL; - - /* success is guaranteed, so update the interface object */ - g_free(net->ifname); + /* 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) { + g_free(net->ifname); + net->ifname = g_steal_pointer(&backupIfname); + return NULL; + } + return g_steal_pointer(&containerVeth); }