From: Hallvard Furuseth Date: Tue, 25 Jul 2017 19:27:36 +0000 (+0200) Subject: Fix mdb_enctest() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9e3603eb9db7551ef112b472064b2a0ad2d7ea74;p=thirdparty%2Fopenldap.git Fix mdb_enctest() Accept a partial ovpage. I.e. decryption of the beginning should not depend on the data at the end. Make the key and IV less regular. (Divisor 67 has period>64.) --- diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index 5857a3c661..9d6467b3a4 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -5549,9 +5549,9 @@ mdb_enctest(const MDB_val *src, MDB_val *dst, const MDB_val *key, int encdec) { mdb_size_t *sptr = src->mv_data, *dptr = dst->mv_data; mdb_size_t x=*(mdb_size_t*)key[0].mv_data, v=*(mdb_size_t*)key[1].mv_data; - int i = dst->mv_size / sizeof(mdb_size_t); + int i, len = dst->mv_size / sizeof(mdb_size_t); - while (--i >= 0) + for (i = 0; i < len; i++) x += v += i + sptr[i] + (dptr[i] = sptr[i] ^ x); } #endif /* MDB_RPAGE_CACHE */ @@ -5581,8 +5581,8 @@ mdb_env_getflags(MDB_env *env) if (flags & MDB_ENCRYPT) { #if MDB_RPAGE_CACHE if (!env->me_encfunc) { - static mdb_size_t k = MDB_SIZE_MAX/9*37; - mdb_size_t iv = ((mdb_size_t)env ^ env->me_pid); + static mdb_size_t k = (MDB_SIZE_MAX/67*73) | 1; + mdb_size_t iv = ((mdb_size_t)env ^ env->me_pid) * k; MDB_val keys[2] = { {sizeof(k), &k}, {sizeof(iv), NULL} }; int rc; keys[1].mv_data = &iv;