From: Mike Stepanek (mstepane) Date: Wed, 22 Jul 2020 11:56:28 +0000 (+0000) Subject: Merge pull request #2341 in SNORT/snort3 from ~KATHARVE/snort3:h2_hi_stream_direction... X-Git-Tag: 3.0.2-3~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bf4204ad1c5f430839331239d45c6567ce6e29bd;p=thirdparty%2Fsnort3.git Merge pull request #2341 in SNORT/snort3 from ~KATHARVE/snort3:h2_hi_stream_direction to master Squashed commit of the following: commit 3a8b5d6029da8da7a25c3f2c63d7546f52e0b3d3 Author: Katura Harvey Date: Tue Jul 21 10:59:04 2020 -0400 http2_inspect: fix stream_in_hi --- diff --git a/src/service_inspectors/http2_inspect/http2_data_cutter.cc b/src/service_inspectors/http2_inspect/http2_data_cutter.cc index bd2ecbcb9..6d7d555c7 100644 --- a/src/service_inspectors/http2_inspect/http2_data_cutter.cc +++ b/src/service_inspectors/http2_inspect/http2_data_cutter.cc @@ -182,11 +182,17 @@ StreamSplitter::Status Http2DataCutter::scan(const uint8_t* data, uint32_t lengt if (!http2_scan(data, length, flush_offset, frame_len, frame_flags, data_offset)) return StreamSplitter::ABORT; - return http_scan(data, flush_offset); + session_data->stream_in_hi = session_data->current_stream[source_id]; + StreamSplitter::Status status = http_scan(data, flush_offset); + session_data->stream_in_hi = NO_STREAM_ID; + + return status; } const StreamBuffer Http2DataCutter::reassemble(const uint8_t* data, unsigned len) { + session_data->stream_in_hi = session_data->current_stream[source_id]; + StreamBuffer frame_buf { nullptr, 0 }; cur_data = cur_padding = cur_data_offset = 0; @@ -315,6 +321,8 @@ const StreamBuffer Http2DataCutter::reassemble(const uint8_t* data, unsigned len bytes_sent_http = reassemble_bytes_sent = 0; } + session_data->stream_in_hi = NO_STREAM_ID; + return frame_buf; } diff --git a/src/service_inspectors/http2_inspect/http2_inspect.cc b/src/service_inspectors/http2_inspect/http2_inspect.cc index 27e304f7b..3830f7b1d 100644 --- a/src/service_inspectors/http2_inspect/http2_inspect.cc +++ b/src/service_inspectors/http2_inspect/http2_inspect.cc @@ -132,6 +132,7 @@ void Http2Inspect::eval(Packet* p) } Http2Stream* stream = session_data->get_current_stream(source_id); + session_data->stream_in_hi = stream->get_stream_id(); stream->eval_frame(session_data->frame_header[source_id], session_data->frame_header_size[source_id], session_data->frame_data[source_id], @@ -177,6 +178,7 @@ void Http2Inspect::clear(Packet* p) const SourceId source_id = p->is_from_client() ? SRC_CLIENT : SRC_SERVER; Http2Stream* stream = session_data->get_current_stream(source_id); stream->clear_frame(); + session_data->stream_in_hi = NO_STREAM_ID; } #ifdef REG_TEST diff --git a/src/service_inspectors/http2_inspect/http2_stream_splitter_impl.cc b/src/service_inspectors/http2_inspect/http2_stream_splitter_impl.cc index ec93ad0ec..1d2f18794 100644 --- a/src/service_inspectors/http2_inspect/http2_stream_splitter_impl.cc +++ b/src/service_inspectors/http2_inspect/http2_stream_splitter_impl.cc @@ -202,6 +202,7 @@ void Http2StreamSplitter::partial_flush_data(Http2FlowData* session_data, *flush_offset = data_offset - 1; session_data->flushing_data[source_id] = true; session_data->num_frame_headers[source_id] -= 1; + session_data->stream_in_hi = NO_STREAM_ID; } bool Http2StreamSplitter::read_frame_hdr(Http2FlowData* session_data, const uint8_t* data, @@ -301,7 +302,7 @@ StreamSplitter::Status Http2StreamSplitter::implement_scan(Http2FlowData* sessio const uint8_t frame_flags = get_frame_flags(session_data-> scan_frame_header[source_id]); const uint32_t old_stream = session_data->current_stream[source_id]; - session_data->stream_in_hi = session_data->current_stream[source_id] = + session_data->current_stream[source_id] = get_stream_id(session_data->scan_frame_header[source_id]); if (session_data->data_processing[source_id] &&