diff options
author | Volker Lendecke <vl@samba.org> | 2019-08-04 12:15:14 +0200 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2019-08-06 21:49:27 +0000 |
commit | 5a388453e0cb038fa3ed5fb46f972470f7793566 (patch) | |
tree | 7e8c094badfdd5ff19359c6fc71ec503639522c4 /lib/tdb | |
parent | 885ba572efaac6c20388b8e119315c837e8f5236 (diff) | |
download | samba-5a388453e0cb038fa3ed5fb46f972470f7793566.tar.gz |
tdb: Introduce tdb_oob()
Initially just encapsulate the pointer dereferences
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'lib/tdb')
-rw-r--r-- | lib/tdb/common/check.c | 6 | ||||
-rw-r--r-- | lib/tdb/common/freelist.c | 2 | ||||
-rw-r--r-- | lib/tdb/common/io.c | 22 | ||||
-rw-r--r-- | lib/tdb/common/open.c | 6 | ||||
-rw-r--r-- | lib/tdb/common/rescue.c | 4 | ||||
-rw-r--r-- | lib/tdb/common/tdb_private.h | 1 | ||||
-rw-r--r-- | lib/tdb/common/transaction.c | 2 | ||||
-rw-r--r-- | lib/tdb/common/traverse.c | 3 |
8 files changed, 26 insertions, 20 deletions
diff --git a/lib/tdb/common/check.c b/lib/tdb/common/check.c index 3a5c8b8ba94..d7741f6b2f9 100644 --- a/lib/tdb/common/check.c +++ b/lib/tdb/common/check.c @@ -94,7 +94,7 @@ static bool tdb_check_record(struct tdb_context *tdb, off, rec->next)); goto corrupt; } - if (tdb->methods->tdb_oob(tdb, rec->next, sizeof(*rec), 0)) + if (tdb_oob(tdb, rec->next, sizeof(*rec), 0)) goto corrupt; /* Check rec_len: similar to rec->next, implies next record. */ @@ -112,7 +112,7 @@ static bool tdb_check_record(struct tdb_context *tdb, goto corrupt; } /* OOB allows "right at the end" access, so this works for last rec. */ - if (tdb->methods->tdb_oob(tdb, off, sizeof(*rec)+rec->rec_len, 0)) + if (tdb_oob(tdb, off, sizeof(*rec)+rec->rec_len, 0)) goto corrupt; /* Check tailer. */ @@ -362,7 +362,7 @@ _PUBLIC_ int tdb_check(struct tdb_context *tdb, } /* Make sure we know true size of the underlying file. */ - tdb->methods->tdb_oob(tdb, tdb->map_size, 1, 1); + tdb_oob(tdb, tdb->map_size, 1, 1); /* Header must be OK: also gets us the recovery ptr, if any. */ if (!tdb_check_header(tdb, &recovery_start)) diff --git a/lib/tdb/common/freelist.c b/lib/tdb/common/freelist.c index 37a4c168533..046c747cf9b 100644 --- a/lib/tdb/common/freelist.c +++ b/lib/tdb/common/freelist.c @@ -50,7 +50,7 @@ int tdb_rec_free_read(struct tdb_context *tdb, tdb_off_t off, struct tdb_record rec->magic, off)); return -1; } - if (tdb->methods->tdb_oob(tdb, rec->next, sizeof(*rec), 0) != 0) + if (tdb_oob(tdb, rec->next, sizeof(*rec), 0) != 0) return -1; return 0; } diff --git a/lib/tdb/common/io.c b/lib/tdb/common/io.c index 06492b1407d..f3ea7bf9856 100644 --- a/lib/tdb/common/io.c +++ b/lib/tdb/common/io.c @@ -216,7 +216,7 @@ static int tdb_write(struct tdb_context *tdb, tdb_off_t off, return -1; } - if (tdb->methods->tdb_oob(tdb, off, len, 0) != 0) + if (tdb_oob(tdb, off, len, 0) != 0) return -1; if (tdb->map_ptr) { @@ -271,7 +271,7 @@ void *tdb_convert(void *buf, uint32_t size) static int tdb_read(struct tdb_context *tdb, tdb_off_t off, void *buf, tdb_len_t len, int cv) { - if (tdb->methods->tdb_oob(tdb, off, len, 0) != 0) { + if (tdb_oob(tdb, off, len, 0) != 0) { return -1; } @@ -596,7 +596,7 @@ int tdb_expand(struct tdb_context *tdb, tdb_off_t size) } /* must know about any previous expansions by another process */ - tdb->methods->tdb_oob(tdb, tdb->map_size, 1, 1); + tdb_oob(tdb, tdb->map_size, 1, 1); /* * Note: that we don't care about tdb->hdr_ofs != 0 here @@ -662,6 +662,12 @@ int tdb_expand(struct tdb_context *tdb, tdb_off_t size) return -1; } +int tdb_oob(struct tdb_context *tdb, tdb_off_t off, tdb_len_t len, int probe) +{ + int ret = tdb->methods->tdb_oob(tdb, off, len, probe); + return ret; +} + /* read/write a tdb_off_t */ int tdb_ofs_read(struct tdb_context *tdb, tdb_off_t offset, tdb_off_t *d) { @@ -714,7 +720,7 @@ int tdb_parse_data(struct tdb_context *tdb, TDB_DATA key, * Optimize by avoiding the malloc/memcpy/free, point the * parser directly at the mmap area. */ - if (tdb->methods->tdb_oob(tdb, offset, len, 0) != 0) { + if (tdb_oob(tdb, offset, len, 0) != 0) { return -1; } data.dptr = offset + (unsigned char *)tdb->map_ptr; @@ -756,20 +762,20 @@ int tdb_rec_read(struct tdb_context *tdb, tdb_off_t offset, struct tdb_record *r return -1; } - ret = tdb->methods->tdb_oob(tdb, offset, rec->key_len, 1); + ret = tdb_oob(tdb, offset, rec->key_len, 1); if (ret == -1) { return -1; } - ret = tdb->methods->tdb_oob(tdb, offset, rec->data_len, 1); + ret = tdb_oob(tdb, offset, rec->data_len, 1); if (ret == -1) { return -1; } - ret = tdb->methods->tdb_oob(tdb, offset, rec->rec_len, 1); + ret = tdb_oob(tdb, offset, rec->rec_len, 1); if (ret == -1) { return -1; } - return tdb->methods->tdb_oob(tdb, rec->next, sizeof(*rec), 0); + return tdb_oob(tdb, rec->next, sizeof(*rec), 0); } int tdb_rec_write(struct tdb_context *tdb, tdb_off_t offset, struct tdb_record *rec) diff --git a/lib/tdb/common/open.c b/lib/tdb/common/open.c index dd5783ef8bc..f7f65b0e237 100644 --- a/lib/tdb/common/open.c +++ b/lib/tdb/common/open.c @@ -655,7 +655,7 @@ _PUBLIC_ struct tdb_context *tdb_open_ex(const char *name, int hash_size, int td * As this skips tdb->hdr_ofs. */ tdb->map_size = 0; - ret = tdb->methods->tdb_oob(tdb, 0, 1, 0); + ret = tdb_oob(tdb, 0, 1, 0); if (ret == -1) { errno = EIO; goto fail; @@ -677,7 +677,7 @@ _PUBLIC_ struct tdb_context *tdb_open_ex(const char *name, int hash_size, int td goto fail; } - ret = tdb->methods->tdb_oob(tdb, FREELIST_TOP, 4*tdb->hash_size, 1); + ret = tdb_oob(tdb, FREELIST_TOP, 4*tdb->hash_size, 1); if (ret == -1) { TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_open_ex: " "hash size %"PRIu32" does not fit\n", tdb->hash_size)); @@ -895,7 +895,7 @@ static int tdb_reopen_internal(struct tdb_context *tdb, bool active_lock) * As this skips tdb->hdr_ofs. */ tdb->map_size = 0; - if (tdb->methods->tdb_oob(tdb, 0, 1, 0) != 0) { + if (tdb_oob(tdb, 0, 1, 0) != 0) { goto fail; } #endif /* fake pread or pwrite */ diff --git a/lib/tdb/common/rescue.c b/lib/tdb/common/rescue.c index e608db41dea..7a85ebc9311 100644 --- a/lib/tdb/common/rescue.c +++ b/lib/tdb/common/rescue.c @@ -60,7 +60,7 @@ static bool looks_like_valid_record(struct tdb_context *tdb, if (rec->next > 0 && rec->next < TDB_DATA_START(tdb->hash_size)) return false; - if (tdb->methods->tdb_oob(tdb, rec->next, sizeof(*rec), 1)) + if (tdb_oob(tdb, rec->next, sizeof(*rec), 1)) return false; key->dsize = rec->key_len; @@ -228,7 +228,7 @@ _PUBLIC_ int tdb_rescue(struct tdb_context *tdb, } /* Make sure we know true size of the underlying file. */ - tdb->methods->tdb_oob(tdb, tdb->map_size, 1, 1); + tdb_oob(tdb, tdb->map_size, 1, 1); /* Suppress logging, since we anticipate errors. */ tdb->log.log_fn = logging_suppressed; diff --git a/lib/tdb/common/tdb_private.h b/lib/tdb/common/tdb_private.h index 42aaac62f59..2bed8200f94 100644 --- a/lib/tdb/common/tdb_private.h +++ b/lib/tdb/common/tdb_private.h @@ -304,6 +304,7 @@ void *tdb_convert(void *buf, uint32_t size); int tdb_free(struct tdb_context *tdb, tdb_off_t offset, struct tdb_record *rec); tdb_off_t tdb_allocate(struct tdb_context *tdb, int hash, tdb_len_t length, struct tdb_record *rec); +int tdb_oob(struct tdb_context *tdb, tdb_off_t off, tdb_len_t len, int probe); int tdb_ofs_read(struct tdb_context *tdb, tdb_off_t offset, tdb_off_t *d); int tdb_ofs_write(struct tdb_context *tdb, tdb_off_t offset, tdb_off_t *d); int tdb_lock_record(struct tdb_context *tdb, tdb_off_t off); diff --git a/lib/tdb/common/transaction.c b/lib/tdb/common/transaction.c index e9b0b26ea59..b22624820d7 100644 --- a/lib/tdb/common/transaction.c +++ b/lib/tdb/common/transaction.c @@ -524,7 +524,7 @@ static int _tdb_transaction_start(struct tdb_context *tdb, /* make sure we know about any file expansions already done by anyone else */ - tdb->methods->tdb_oob(tdb, tdb->map_size, 1, 1); + tdb_oob(tdb, tdb->map_size, 1, 1); tdb->transaction->old_map_size = tdb->map_size; /* finally hook the io methods, replacing them with diff --git a/lib/tdb/common/traverse.c b/lib/tdb/common/traverse.c index 54a69dc8d03..d69e7dff285 100644 --- a/lib/tdb/common/traverse.c +++ b/lib/tdb/common/traverse.c @@ -453,8 +453,7 @@ _PUBLIC_ int tdb_traverse_chain(struct tdb_context *tdb, if ((tdb->transaction == NULL) && (tdb->map_ptr != NULL)) { - ret = tdb->methods->tdb_oob( - tdb, key_ofs, full_len, 0); + ret = tdb_oob(tdb, key_ofs, full_len, 0); if (ret == -1) { goto fail; } |