nbd/server: add additional assert to nbd_export_put
authorVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Thu, 7 Dec 2017 15:50:57 +0000 (18:50 +0300)
committerEric Blake <eblake@redhat.com>
Tue, 9 Jan 2018 18:53:44 +0000 (12:53 -0600)
This place is not obvious, nbd_export_close may theoretically reduce
refcount to 0. It may happen if someone calls nbd_export_put on named
export not through nbd_export_set_name when refcount is 1.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Message-Id: <20171207155102.66622-2-vsementsov@virtuozzo.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
nbd/server.c

index e443b3cf5c58eb35c01433526f9adb6e0119c128..6cf2eeb2c1a2f104ca823f483fbc1dbe32269947 100644 (file)
@@ -1190,6 +1190,12 @@ void nbd_export_put(NBDExport *exp)
         nbd_export_close(exp);
     }
 
+    /* nbd_export_close() may theoretically reduce refcount to 0. It may happen
+     * if someone calls nbd_export_put() on named export not through
+     * nbd_export_set_name() when refcount is 1. So, let's assert that
+     * it is > 0.
+     */
+    assert(exp->refcount > 0);
     if (--exp->refcount == 0) {
         assert(exp->name == NULL);
         assert(exp->description == NULL);