From: Adam Kupczyk Date: Wed, 5 Jun 2024 07:47:03 +0000 (+0000) Subject: os/bluestore: Fix ExtentDecoderPartial::_consume_new_blob X-Git-Tag: v18.2.7~2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=7b5402dab9fd6286927d0420f40728e76a32de3c;p=ceph.git os/bluestore: Fix ExtentDecoderPartial::_consume_new_blob In case of corrupted data invalid iterator could be dereferenced. Fixes: https://tracker.ceph.com/issues/66361 Signed-off-by: Adam Kupczyk (cherry picked from commit e59495b331765f4081d5aab66c939ec10b4b8344) (cherry picked from commit 1cb9a684778450289d4f7d6430471f02eb775e3e) --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 18913e6833f1b..a6b7ef6b97acd 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -19046,20 +19046,20 @@ void BlueStore::ExtentDecoderPartial::_consume_new_blob(bool spanning, } } else { auto it = sb_info.find(sbid); - if (it == sb_info.end()) { - derr << __func__ << " shared blob not found:" << sbid - << dendl; - } - auto &sbi = *it; - auto pool_id = oid.hobj.get_logical_pool(); - if (sbi.pool_id == sb_info_t::INVALID_POOL_ID) { - sbi.pool_id = pool_id; - size_t alloc_delta = sbi.allocated_chunks << min_alloc_size_order; - per_pool_statfs->allocated() += alloc_delta; - if (compressed) { - per_pool_statfs->compressed_allocated() += alloc_delta; - ++stats.compressed_blob_count; + if (it != sb_info.end()) { + auto &sbi = *it; + auto pool_id = oid.hobj.get_logical_pool(); + if (sbi.pool_id == sb_info_t::INVALID_POOL_ID) { + sbi.pool_id = pool_id; + size_t alloc_delta = sbi.allocated_chunks << min_alloc_size_order; + per_pool_statfs->allocated() += alloc_delta; + if (compressed) { + per_pool_statfs->compressed_allocated() += alloc_delta; + ++stats.compressed_blob_count; + } } + } else { + derr << __func__ << " shared blob not found:" << sbid << dendl; } if (compressed) { per_pool_statfs->compressed() +=