summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2018-03-04 11:26:37 +0100
committerJeremy Allison <jra@samba.org>2018-03-22 02:15:14 +0100
commit6f45cbf42738d869e310027c05e0a5bba07de9fc (patch)
tree54af6f1ca922f4341ccbef47866c1d6f9306bf0f
parent5f24fd6863f1278f1e5ea27829c5402c0cae4366 (diff)
downloadsamba-6f45cbf42738d869e310027c05e0a5bba07de9fc.tar.gz
tdb: Harden allocating the tdb recovery area
Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
-rw-r--r--lib/tdb/common/transaction.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/tdb/common/transaction.c b/lib/tdb/common/transaction.c
index 7d281fc75ff..6a5338c5faf 100644
--- a/lib/tdb/common/transaction.c
+++ b/lib/tdb/common/transaction.c
@@ -689,6 +689,8 @@ int tdb_recovery_area(struct tdb_context *tdb,
tdb_off_t *recovery_offset,
struct tdb_record *rec)
{
+ int ret;
+
if (tdb_ofs_read(tdb, TDB_RECOVERY_HEAD, recovery_offset) == -1) {
return -1;
}
@@ -709,6 +711,13 @@ int tdb_recovery_area(struct tdb_context *tdb,
*recovery_offset = 0;
rec->rec_len = 0;
}
+
+ ret = methods->tdb_oob(tdb, *recovery_offset, rec->rec_len, 1);
+ if (ret == -1) {
+ *recovery_offset = 0;
+ rec->rec_len = 0;
+ }
+
return 0;
}