X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftdb2%2Fcheck.c;h=42f7538edf97a899d9a3758b78c3ec59bf1c2dfb;hp=ca5479b56d06fbf9650982a6c7b34325b11dc62e;hb=cb399d268c839dd75a59678268f3ba666147cc20;hpb=06e0037d97f5e1d83667ec40627cef862f3b7b85 diff --git a/ccan/tdb2/check.c b/ccan/tdb2/check.c index ca5479b5..42f7538e 100644 --- a/ccan/tdb2/check.c +++ b/ccan/tdb2/check.c @@ -71,8 +71,8 @@ static bool check_header(struct tdb_context *tdb) < tdb->map_size) { tdb->log(tdb, TDB_DEBUG_ERROR, tdb->log_priv, "check: %llu zones size %llu don't cover %llu\n", - (long long)(1ULL << tdb->header.v.zone_bits), (long long)tdb->header.v.num_zones, + (long long)(1ULL << tdb->header.v.zone_bits), (long long)tdb->map_size); return false; } @@ -372,6 +372,14 @@ int tdb_check(struct tdb_context *tdb, if (tdb->methods->oob(tdb, off + len, false)) goto fail; + if (len < sizeof(p->f)) { + tdb->log(tdb, TDB_DEBUG_ERROR, tdb->log_priv, + "tdb_check: too short record %llu at" + " %llu\n", + (long long)len, (long long)off); + goto fail; + } + if (off + sizeof(p->u) == tdb->header.v.hash_off) { hash_found = true; } else if (off + sizeof(p->u)