From: Yingxin Cheng Date: Wed, 12 Jan 2022 05:32:34 +0000 (+0800) Subject: crimson/os/seastore/journal: validate segments before replay X-Git-Tag: v18.0.0~1563^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=13fb5f676cd6c086840a24b4732d12a36eec924b;p=ceph.git crimson/os/seastore/journal: validate segments before replay Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/journal.cc b/src/crimson/os/seastore/journal.cc index 49fe210ed6b..f24adb68904 100644 --- a/src/crimson/os/seastore/journal.cc +++ b/src/crimson/os/seastore/journal.cc @@ -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);