X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftdb2%2Ftdb1_check.c;h=07ee07553a633e21cb8855180dc1779a706380d1;hp=4d71712c473fb465021ca0cd778dc3b9bbdad418;hb=0b93bd102aad6b61f1e569fb12aabc6352a1d7cd;hpb=ef92843f2c74ab9d4fa7f167a2182e5e8955df91 diff --git a/ccan/tdb2/tdb1_check.c b/ccan/tdb2/tdb1_check.c index 4d71712c..07ee0755 100644 --- a/ccan/tdb2/tdb1_check.c +++ b/ccan/tdb2/tdb1_check.c @@ -92,7 +92,7 @@ static bool tdb1_check_record(struct tdb_context *tdb, off, rec->next); goto corrupt; } - if (tdb->tdb1.io->tdb1_oob(tdb, rec->next+sizeof(*rec), 0)) + if (tdb->tdb1.io->tdb1_oob(tdb, rec->next, sizeof(*rec), 0)) goto corrupt; /* Check rec_len: similar to rec->next, implies next record. */ @@ -110,7 +110,7 @@ static bool tdb1_check_record(struct tdb_context *tdb, goto corrupt; } /* OOB allows "right at the end" access, so this works for last rec. */ - if (tdb->tdb1.io->tdb1_oob(tdb, off+sizeof(*rec)+rec->rec_len, 0)) + if (tdb->tdb1.io->tdb1_oob(tdb, off, sizeof(*rec)+rec->rec_len, 0)) goto corrupt; /* Check tailer. */ @@ -339,6 +339,7 @@ int tdb1_check(struct tdb_context *tdb, bool found_recovery = false; tdb1_len_t dead; bool locked; + size_t alloc_len; /* We may have a write lock already, so don't re-lock. */ if (tdb->file->allrecord_lock.count != 0) { @@ -350,7 +351,7 @@ int tdb1_check(struct tdb_context *tdb, } /* Make sure we know true size of the underlying file. */ - tdb->tdb1.io->tdb1_oob(tdb, tdb->file->map_size + 1, 1); + tdb->tdb1.io->tdb1_oob(tdb, tdb->file->map_size, 1, 1); /* Header must be OK: also gets us the recovery ptr, if any. */ if (!tdb1_check_header(tdb, &recovery_start)) @@ -364,11 +365,13 @@ int tdb1_check(struct tdb_context *tdb, } /* One big malloc: pointers then bit arrays. */ - hashes = (unsigned char **)calloc( - 1, sizeof(hashes[0]) * (1+tdb->tdb1.header.hash_size) - + BITMAP_BITS / CHAR_BIT * (1+tdb->tdb1.header.hash_size)); + alloc_len = sizeof(hashes[0]) * (1+tdb->tdb1.header.hash_size) + + BITMAP_BITS / CHAR_BIT * (1+tdb->tdb1.header.hash_size); + hashes = (unsigned char **)calloc(1, alloc_len); if (!hashes) { - tdb->last_error = TDB_ERR_OOM; + tdb->last_error = tdb_logerr(tdb, TDB_ERR_OOM, TDB_LOG_ERROR, + "tdb_check: could not allocate %zu", + alloc_len); goto unlock; }