diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter_gentech_driver.c index 7d9871a146..78919838b4 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -898,11 +898,18 @@ _virNWFilterInstantiateFilter(virConnectPtr conn, int ifindex; int rc; - if (ifaceGetIndex(true, net->ifname, &ifindex) < 0) - return 1; - virNWFilterLockFilterUpdates(); + /* after grabbing the filter update lock check for the interface; if + it's not there anymore its filters will be or are being removed + (while holding the lock) and we don't want to build new ones */ + if (ifaceGetIndex(false, net->ifname, &ifindex) < 0) { + /* interfaces / VMs can disappear during filter instantiation; + don't mark it as an error */ + rc = 0; + goto cleanup; + } + rc = __virNWFilterInstantiateFilter(conn, teardownOld, net->ifname, @@ -917,6 +924,7 @@ _virNWFilterInstantiateFilter(virConnectPtr conn, false, foundNewFilter); +cleanup: virNWFilterUnlockFilterUpdates(); return rc;