Commit c8c0c25c authored by Rusty Russell's avatar Rusty Russell

tdb2: fix infinite loop in tdb_check

check_free_list returns a length, not bool.
parent e2cb71e5
......@@ -336,11 +336,11 @@ static tdb_len_t check_free_list(struct tdb_context *tdb,
h = bucket_off(zone_off, i);
for (off = tdb_read_off(tdb, h); off; off = f.next) {
if (off == TDB_OFF_ERR)
return false;
return TDB_OFF_ERR;
if (tdb_read_convert(tdb, off, &f, sizeof(f)))
return false;
return TDB_OFF_ERR;
if (!check_free(tdb, off, &f, prev, zone_off, i))
return false;
return TDB_OFF_ERR;
/* FIXME: Check hash bits */
p = asearch(&off, free, num_free, off_cmp);
......@@ -350,7 +350,7 @@ static tdb_len_t check_free_list(struct tdb_context *tdb,
"tdb_check: Invalid offset"
" %llu in free table\n",
(long long)off);
return false;
return TDB_OFF_ERR;
}
/* Mark it invalid. */
*p ^= 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment