diff --git a/ChangeLog.md b/ChangeLog.md index 5c7480d7..157e2235 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -16,6 +16,10 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic к падению **отладочных сборок**, так как в них соответствующий массив намеренно заполнен некорректными указателями. + - Устранение возможности `SIGSEGV` внутри `coherency_check()` после + изменения геометрии другим процессом с увеличением верхнего размера БД + и увеличением БД больше предыдущего лимита. + -------------------------------------------------------------------------------- diff --git a/src/core.c b/src/core.c index 86d3a812..2b6bf969 100644 --- a/src/core.c +++ b/src/core.c @@ -8703,7 +8703,9 @@ static bool coherency_check(const MDBX_env *env, const txnid_t txnid, : "(wagering meta)"); ok = false; } - if (likely(freedb_root && freedb_mod_txnid)) { + if (likely(freedb_root && freedb_mod_txnid && + (size_t)ptr_dist(env->me_dxb_mmap.base, freedb_root) < + env->me_dxb_mmap.limit)) { VALGRIND_MAKE_MEM_DEFINED(freedb_root, sizeof(freedb_root->mp_txnid)); MDBX_ASAN_UNPOISON_MEMORY_REGION(freedb_root, sizeof(freedb_root->mp_txnid)); @@ -8719,7 +8721,9 @@ static bool coherency_check(const MDBX_env *env, const txnid_t txnid, ok = false; } } - if (likely(maindb_root && maindb_mod_txnid)) { + if (likely(maindb_root && maindb_mod_txnid && + (size_t)ptr_dist(env->me_dxb_mmap.base, maindb_root) < + env->me_dxb_mmap.limit)) { VALGRIND_MAKE_MEM_DEFINED(maindb_root, sizeof(maindb_root->mp_txnid)); MDBX_ASAN_UNPOISON_MEMORY_REGION(maindb_root, sizeof(maindb_root->mp_txnid));