]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore/journal: validate segments before replay
authorYingxin Cheng <yingxin.cheng@intel.com>
Wed, 12 Jan 2022 05:32:34 +0000 (13:32 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Fri, 14 Jan 2022 15:06:43 +0000 (23:06 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/journal.cc

index 49fe210ed6b112ab96b20d2a4e620be3f6617a7d..f24adb6890479cbd3a6c1dffac103d303cb41ada 100644 (file)
@@ -66,12 +66,19 @@ Journal::prep_replay_segments(
   std::for_each(
     segments.begin(),
     segments.end(),
-    [this](auto &seg) {
-      segment_provider->init_mark_segment_closed(
-       seg.first,
-       seg.second.journal_segment_seq,
-       false);
-    });
+    [this, FNAME](auto &seg)
+  {
+    if (seg.first != seg.second.physical_segment_id ||
+        seg.first.device_id() != journal_segment_manager.get_device_id() ||
+        seg.second.out_of_line == true) {
+      ERROR("illegal journal segment for replay -- {}", seg.second);
+      ceph_abort();
+    }
+    segment_provider->init_mark_segment_closed(
+      seg.first,
+      seg.second.journal_segment_seq,
+      false);
+  });
 
   auto journal_tail = segments.rbegin()->second.journal_tail;
   segment_provider->update_journal_tail_committed(journal_tail);