mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-10 17:57:25 +03:00
qemuDomainAttachNetDevice: Avoid @originalError leak
Coverity identified that this variable might be leaked. And it's right. If an error occurred and we have to roll back the control jumps to try_remove label where we save the current error (see 0e82fa4c34 for more info). However, inside the code a jump onto other label is possible thus leaking the error object. Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
e555ed6f7b
commit
ca1ac6643e
@ -1326,32 +1326,32 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver,
|
||||
if (vlan < 0) {
|
||||
if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_NETDEV)) {
|
||||
char *netdev_name;
|
||||
if (virAsprintf(&netdev_name, "host%s", net->info.alias) < 0)
|
||||
goto cleanup;
|
||||
qemuDomainObjEnterMonitor(driver, vm);
|
||||
if (charDevPlugged &&
|
||||
qemuMonitorDetachCharDev(priv->mon, charDevAlias) < 0)
|
||||
VIR_WARN("Failed to remove associated chardev %s", charDevAlias);
|
||||
if (netdevPlugged &&
|
||||
qemuMonitorRemoveNetdev(priv->mon, netdev_name) < 0)
|
||||
VIR_WARN("Failed to remove network backend for netdev %s",
|
||||
netdev_name);
|
||||
ignore_value(qemuDomainObjExitMonitor(driver, vm));
|
||||
VIR_FREE(netdev_name);
|
||||
if (virAsprintf(&netdev_name, "host%s", net->info.alias) >= 0) {
|
||||
qemuDomainObjEnterMonitor(driver, vm);
|
||||
if (charDevPlugged &&
|
||||
qemuMonitorDetachCharDev(priv->mon, charDevAlias) < 0)
|
||||
VIR_WARN("Failed to remove associated chardev %s", charDevAlias);
|
||||
if (netdevPlugged &&
|
||||
qemuMonitorRemoveNetdev(priv->mon, netdev_name) < 0)
|
||||
VIR_WARN("Failed to remove network backend for netdev %s",
|
||||
netdev_name);
|
||||
ignore_value(qemuDomainObjExitMonitor(driver, vm));
|
||||
VIR_FREE(netdev_name);
|
||||
}
|
||||
} else {
|
||||
VIR_WARN("Unable to remove network backend");
|
||||
}
|
||||
} else {
|
||||
char *hostnet_name;
|
||||
if (virAsprintf(&hostnet_name, "host%s", net->info.alias) < 0)
|
||||
goto cleanup;
|
||||
qemuDomainObjEnterMonitor(driver, vm);
|
||||
if (hostPlugged &&
|
||||
qemuMonitorRemoveHostNetwork(priv->mon, vlan, hostnet_name) < 0)
|
||||
VIR_WARN("Failed to remove network backend for vlan %d, net %s",
|
||||
vlan, hostnet_name);
|
||||
ignore_value(qemuDomainObjExitMonitor(driver, vm));
|
||||
VIR_FREE(hostnet_name);
|
||||
if (virAsprintf(&hostnet_name, "host%s", net->info.alias) >= 0) {
|
||||
qemuDomainObjEnterMonitor(driver, vm);
|
||||
if (hostPlugged &&
|
||||
qemuMonitorRemoveHostNetwork(priv->mon, vlan, hostnet_name) < 0)
|
||||
VIR_WARN("Failed to remove network backend for vlan %d, net %s",
|
||||
vlan, hostnet_name);
|
||||
ignore_value(qemuDomainObjExitMonitor(driver, vm));
|
||||
VIR_FREE(hostnet_name);
|
||||
}
|
||||
}
|
||||
virSetError(originalError);
|
||||
virFreeError(originalError);
|
||||
|
Loading…
x
Reference in New Issue
Block a user