X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftdb2%2Flock.c;h=c7c449abc1a37091824563475b7aa7558f89e759;hp=14a7b5e5c65904749bd78647bb7558b12489fb15;hb=9faf17435f1f5ce3c7046a738c45b60597838c03;hpb=6c69b9ba6b46ea0d15f90eb1649cbb2acf6a28de diff --git a/ccan/tdb2/lock.c b/ccan/tdb2/lock.c index 14a7b5e5..c7c449ab 100644 --- a/ccan/tdb2/lock.c +++ b/ccan/tdb2/lock.c @@ -255,13 +255,18 @@ static int tdb_nest_lock(struct tdb_context *tdb, tdb_off_t offset, int ltype, { struct tdb_lock_type *new_lck; - if (offset >= TDB_HASH_LOCK_START + (1ULL << tdb->header.v.hash_bits) - + (tdb->header.v.num_zones * (tdb->header.v.free_buckets+1))) { - tdb->ecode = TDB_ERR_LOCK; - tdb->log(tdb, TDB_DEBUG_FATAL, tdb->log_priv, - "tdb_lock: invalid offset %llu for ltype=%d\n", - (long long)offset, ltype); - return -1; + /* Header is not valid for open lock; valgrind complains. */ + if (offset >= TDB_HASH_LOCK_START) { + if (offset > TDB_HASH_LOCK_START + + (1ULL << tdb->header.v.hash_bits) + + (tdb->header.v.num_zones + * (tdb->header.v.free_buckets+1))) { + tdb->ecode = TDB_ERR_LOCK; + tdb->log(tdb, TDB_DEBUG_FATAL, tdb->log_priv, + "tdb_lock: invalid offset %llu ltype=%d\n", + (long long)offset, ltype); + return -1; + } } if (tdb->flags & TDB_NOLOCK) return 0;