cleanup:
if (ret < 0) {
size_t i;
- for (i = 0; i < *tapfdSize; i++)
+ for (i = 0; i < *tapfdSize && tapfd[i] >= 0; i++)
VIR_FORCE_CLOSE(tapfd[i]);
if (template_ifname)
VIR_FREE(net->ifname);
VIR_ALLOC_N(tapfdName, tapfdSize) < 0)
goto cleanup;
+ memset(tapfd, -1, tapfdSize * sizeof(tapfd[0]));
+
if (qemuNetworkIfaceConnect(def, conn, driver, net,
qemuCaps, tapfd, &tapfdSize) < 0)
goto cleanup;
VIR_ALLOC_N(vhostfdName, vhostfdSize))
goto cleanup;
+ memset(vhostfd, -1, vhostfdSize * sizeof(vhostfd[0]));
+
if (qemuOpenVhostNet(def, net, qemuCaps, vhostfd, &vhostfdSize) < 0)
goto cleanup;
}
cleanup:
if (ret < 0)
virDomainConfNWFilterTeardown(net);
- for (i = 0; tapfd && i < tapfdSize; i++) {
+ for (i = 0; tapfd && i < tapfdSize && tapfd[i] >= 0; i++) {
if (ret < 0)
VIR_FORCE_CLOSE(tapfd[i]);
if (tapfdName)
VIR_FREE(tapfdName[i]);
}
- for (i = 0; vhostfd && i < vhostfdSize; i++) {
+ for (i = 0; vhostfd && i < vhostfdSize && vhostfd[i] >= 0; i++) {
if (ret < 0)
VIR_FORCE_CLOSE(vhostfd[i]);
if (vhostfdName)
{
virMacAddr tapmac;
char macaddrstr[VIR_MAC_STRING_BUFLEN];
+ size_t i;
if (virNetDevTapCreate(ifname, tapfd, tapfdSize, flags) < 0)
return -1;
return 0;
error:
- while (tapfdSize)
- VIR_FORCE_CLOSE(tapfd[--tapfdSize]);
+ for (i = 0; i < tapfdSize && tapfd[i] >= 0; i++)
+ VIR_FORCE_CLOSE(tapfd[i]);
return -1;
}