]> the.earth.li Git - onak.git/commitdiff
Guard max lock setting with error check
authorJonathan McDowell <noodles@earth.li>
Tue, 22 Jul 2014 12:01:14 +0000 (13:01 +0100)
committerJonathan McDowell <noodles@earth.li>
Tue, 22 Jul 2014 12:01:14 +0000 (13:01 +0100)
We weren't checking for an error before setting the DB4 maxlocks
parameter, which could cause a NULL dereference in the error path.

keydb_db4.c

index 369788ea6133c06f92d2b4567be8693f65a8984e..b2d34c5360018d1ff88dca9dd83bba92a2c0d218 100644 (file)
@@ -1706,12 +1706,14 @@ struct onak_dbctx *keydb_db4_init(bool readonly)
         * Up the number of locks we're allowed at once. We base this on
         * the maximum number of keys we're going to return.
         */
-       maxlocks = config.maxkeys * 16;
-       if (maxlocks < 1000) {
-               maxlocks = 1000;
+       if (ret == 0) {
+               maxlocks = config.maxkeys * 16;
+               if (maxlocks < 1000) {
+                       maxlocks = 1000;
+               }
+               privctx->dbenv->set_lk_max_locks(privctx->dbenv, maxlocks);
+               privctx->dbenv->set_lk_max_objects(privctx->dbenv, maxlocks);
        }
-       privctx->dbenv->set_lk_max_locks(privctx->dbenv, maxlocks);
-       privctx->dbenv->set_lk_max_objects(privctx->dbenv, maxlocks);
 
        /*
         * Enable deadlock detection so that we don't block indefinitely on