From: Radoslaw Zarzynski Date: Thu, 21 Feb 2019 00:42:17 +0000 (+0100) Subject: msg/async, v2: drop the scaffolding in preamble parsing. X-Git-Tag: v14.1.1~157^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8bb18a83533e8ecf8da018b369fb3a8b71e7f9fd;p=ceph.git msg/async, v2: drop the scaffolding in preamble parsing. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/msg/async/ProtocolV2.cc b/src/msg/async/ProtocolV2.cc index 59c6b1935146..ebee09078f3d 100644 --- a/src/msg/async/ProtocolV2.cc +++ b/src/msg/async/ProtocolV2.cc @@ -1458,11 +1458,26 @@ CtPtr ProtocolV2::handle_read_frame_preamble_main(char *buffer, int r) { // everything through ::decode is unnecessary. const auto& main_preamble = \ reinterpret_cast(*preamble.c_str()); - next_tag = static_cast(main_preamble.tag); - // FIXME: makeshift solution - ceph_assert_always(main_preamble.num_segments == 1 || - main_preamble.num_segments == 4); + // verify preamble's CRC before any further processing + const auto rx_crc = ceph_crc32c(0, + reinterpret_cast(&main_preamble), + sizeof(main_preamble) - sizeof(main_preamble.crc)); + if (rx_crc != main_preamble.crc) { + ldout(cct, 10) << __func__ << " crc mismatch for main preamble" + << " rx_crc=" << rx_crc + << " tx_crc=" << main_preamble.crc << dendl; + return _fault(); + } + + // currently we do support only 4 or 1 segments + if (main_preamble.num_segments != 1 && main_preamble.num_segments != 4) { + ldout(cct, 10) << __func__ << " unsupported num_segments=" + << " tx_crc=" << main_preamble.num_segments << dendl; + return _fault(); + } + + next_tag = static_cast(main_preamble.tag); rx_segments_desc.clear(); rx_segments_data.clear(); @@ -1492,17 +1507,6 @@ CtPtr ProtocolV2::handle_read_frame_preamble_main(char *buffer, int r) { next_payload_len += \ session_stream_handlers.rx->get_extra_size_at_final(); } - - // TODO: move this ugliness into dedicated procedure - const auto rx_crc = ceph_crc32c(0, - reinterpret_cast(&main_preamble), - sizeof(main_preamble) - sizeof(main_preamble.crc)); - if (rx_crc != main_preamble.crc) { - ldout(cct, 10) << __func__ << "crc mismatch for main preamble" - << " rx_crc=" << rx_crc - << " tx_crc=" << main_preamble.crc << dendl; - return _fault(); - } } // does it need throttle?