Skip to content

Commit e59495b

Browse files
committed
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 <[email protected]>
1 parent d52b9da commit e59495b

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

src/os/bluestore/BlueStore.cc

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19521,20 +19521,20 @@ void BlueStore::ExtentDecoderPartial::_consume_new_blob(bool spanning,
1952119521
}
1952219522
} else {
1952319523
auto it = sb_info.find(sbid);
19524-
if (it == sb_info.end()) {
19525-
derr << __func__ << " shared blob not found:" << sbid
19526-
<< dendl;
19527-
}
19528-
auto &sbi = *it;
19529-
auto pool_id = oid.hobj.get_logical_pool();
19530-
if (sbi.pool_id == sb_info_t::INVALID_POOL_ID) {
19531-
sbi.pool_id = pool_id;
19532-
size_t alloc_delta = sbi.allocated_chunks << min_alloc_size_order;
19533-
per_pool_statfs->allocated() += alloc_delta;
19534-
if (compressed) {
19535-
per_pool_statfs->compressed_allocated() += alloc_delta;
19536-
++stats.compressed_blob_count;
19524+
if (it != sb_info.end()) {
19525+
auto &sbi = *it;
19526+
auto pool_id = oid.hobj.get_logical_pool();
19527+
if (sbi.pool_id == sb_info_t::INVALID_POOL_ID) {
19528+
sbi.pool_id = pool_id;
19529+
size_t alloc_delta = sbi.allocated_chunks << min_alloc_size_order;
19530+
per_pool_statfs->allocated() += alloc_delta;
19531+
if (compressed) {
19532+
per_pool_statfs->compressed_allocated() += alloc_delta;
19533+
++stats.compressed_blob_count;
19534+
}
1953719535
}
19536+
} else {
19537+
derr << __func__ << " shared blob not found:" << sbid << dendl;
1953819538
}
1953919539
if (compressed) {
1954019540
per_pool_statfs->compressed() +=

0 commit comments

Comments
 (0)