]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
nwfilter: fix crash when counting number of network filters
authorDaniel P. Berrangé <berrange@redhat.com>
Tue, 8 Mar 2022 17:28:38 +0000 (17:28 +0000)
committerDaniel P. Berrangé <berrange@redhat.com>
Thu, 17 Mar 2022 11:32:07 +0000 (11:32 +0000)
The virNWFilterObjListNumOfNWFilters method iterates over the
driver->nwfilters, accessing virNWFilterObj instances. As such
it needs to be protected against concurrent modification of
the driver->nwfilters object.

This API allows unprivileged users to connect, so users with
read-only access to libvirt can cause a denial of service
crash if they are able to race with a call of virNWFilterUndefine.
Since network filters are usually statically defined, this is
considered a low severity problem.

This is assigned CVE-2022-0897.

Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
src/nwfilter/nwfilter_driver.c

index 3ce8fce7f920dbb40deac82cf4d8035f4164cfdf..a493205c8013bd9ee00463bb6761365b3f64c673 100644 (file)
@@ -478,11 +478,15 @@ nwfilterLookupByName(virConnectPtr conn,
 static int
 nwfilterConnectNumOfNWFilters(virConnectPtr conn)
 {
+    int ret;
     if (virConnectNumOfNWFiltersEnsureACL(conn) < 0)
         return -1;
 
-    return virNWFilterObjListNumOfNWFilters(driver->nwfilters, conn,
-                                        virConnectNumOfNWFiltersCheckACL);
+    nwfilterDriverLock();
+    ret = virNWFilterObjListNumOfNWFilters(driver->nwfilters, conn,
+                                           virConnectNumOfNWFiltersCheckACL);
+    nwfilterDriverUnlock();
+    return ret;
 }