]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: Fix ExtentDecoderPartial::_consume_new_blob 62054/head
authorAdam Kupczyk <akupczyk@ibm.com>
Wed, 5 Jun 2024 07:47:03 +0000 (07:47 +0000)
committerKonstantin Shalygin <k0ste@k0ste.ru>
Fri, 28 Feb 2025 12:21:04 +0000 (19:21 +0700)
In case of corrupted data invalid iterator could be dereferenced.
Fixes: https://tracker.ceph.com/issues/66361
Signed-off-by: Adam Kupczyk <akupczyk@ibm.com>
(cherry picked from commit e59495b331765f4081d5aab66c939ec10b4b8344)

src/os/bluestore/BlueStore.cc

index 18913e6833f1b07aaf20818ca5d6b12a69da1ac2..a6b7ef6b97acd02f157479e66c8213818e42e42d 100644 (file)
@@ -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() +=