From 3f90994e587cc411f81ec6b81492797f473447c7 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Tue, 16 Nov 2021 16:15:42 +0800 Subject: [PATCH] crimson/os/seastore: add more checks when read record_header_t Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/extent_reader.cc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/crimson/os/seastore/extent_reader.cc b/src/crimson/os/seastore/extent_reader.cc index bd95eb9dae7..e3c3a5a45c5 100644 --- a/src/crimson/os/seastore/extent_reader.cc +++ b/src/crimson/os/seastore/extent_reader.cc @@ -252,8 +252,13 @@ ExtentReader::read_validate_record_metadata( std::nullopt); } auto& seg_addr = start.as_seg_paddr(); - if (seg_addr.get_segment_off() + header.mdlength > - (int64_t)segment_manager.get_segment_size()) { + if (header.mdlength < block_size || + header.mdlength % block_size != 0 || + header.dlength % block_size != 0 || + (header.committed_to != journal_seq_t() && + header.committed_to.offset.as_seg_paddr().get_segment_off() % block_size != 0) || + (seg_addr.get_segment_off() + header.mdlength + header.dlength > + (int64_t)segment_manager.get_segment_size())) { logger().error("read_validate_record_metadata: failed, invalid header"); return crimson::ct_error::input_output_error::make(); } -- 2.39.5