]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #2341 in SNORT/snort3 from ~KATHARVE/snort3:h2_hi_stream_direction...
authorMike Stepanek (mstepane) <mstepane@cisco.com>
Wed, 22 Jul 2020 11:56:28 +0000 (11:56 +0000)
committerMike Stepanek (mstepane) <mstepane@cisco.com>
Wed, 22 Jul 2020 11:56:28 +0000 (11:56 +0000)
Squashed commit of the following:

commit 3a8b5d6029da8da7a25c3f2c63d7546f52e0b3d3
Author: Katura Harvey <katharve@cisco.com>
Date:   Tue Jul 21 10:59:04 2020 -0400

    http2_inspect: fix stream_in_hi

src/service_inspectors/http2_inspect/http2_data_cutter.cc
src/service_inspectors/http2_inspect/http2_inspect.cc
src/service_inspectors/http2_inspect/http2_stream_splitter_impl.cc

index bd2ecbcb9be91b299a7eec113d34fe14c585ea63..6d7d555c7e5c6cbe2f65bf7fc1670b8997918749 100644 (file)
@@ -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;
 }
 
index 27e304f7bc9d324a1545f938fde8a683f3341266..3830f7b1d600eaaad8e2492b91235bed2f96380b 100644 (file)
@@ -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
index ec93ad0ec0de776a5af0a81ca671f5142c312332..1d2f187943abe15e901a7a5a5e9b6ac3daf9f7c3 100644 (file)
@@ -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] &&