From 1cb9a684778450289d4f7d6430471f02eb775e3e Mon Sep 17 00:00:00 2001 From: Adam Kupczyk Date: Wed, 5 Jun 2024 07:47:03 +0000 Subject: [PATCH] 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) --- src/os/bluestore/BlueStore.cc | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) 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() += -- 2.39.5