From: Philippe Antoine Date: Tue, 6 Oct 2020 18:52:42 +0000 (+0200) Subject: ssl: do not reuse struct session_id_length X-Git-Tag: suricata-5.0.4~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bd7c6f61e7ee87fd1ed21a9a1a3bd8d7551ef83a;p=thirdparty%2Fsuricata.git ssl: do not reuse struct session_id_length As it can be confused between SSLv2 and TLSv13 In SSLv2, this variable is not used after the function scope, so we can use a temporary variable. --- diff --git a/src/app-layer-ssl.c b/src/app-layer-ssl.c index 19b3f131f7..73c777d48c 100644 --- a/src/app-layer-ssl.c +++ b/src/app-layer-ssl.c @@ -1986,12 +1986,11 @@ static int SSLv2Decode(uint8_t direction, SSLState *ssl_state, switch (ssl_state->curr_connp->bytes_processed) { case 4: if (input_len >= 6) { - ssl_state->curr_connp->session_id_length = input[4] << 8; - ssl_state->curr_connp->session_id_length |= input[5]; + uint16_t session_id_length = input[5] | (input[4] << 8); input += 6; input_len -= 6; ssl_state->curr_connp->bytes_processed += 6; - if (ssl_state->curr_connp->session_id_length == 0) { + if (session_id_length == 0) { ssl_state->current_flags |= SSL_AL_FLAG_SSL_NO_SESSION_ID; } @@ -2026,14 +2025,12 @@ static int SSLv2Decode(uint8_t direction, SSLState *ssl_state, /* fall through */ case 8: - ssl_state->curr_connp->session_id_length = *(input++) << 8; ssl_state->curr_connp->bytes_processed++; if (--input_len == 0) break; /* fall through */ case 9: - ssl_state->curr_connp->session_id_length |= *(input++); ssl_state->curr_connp->bytes_processed++; if (--input_len == 0) break; @@ -2045,12 +2042,11 @@ static int SSLv2Decode(uint8_t direction, SSLState *ssl_state, switch (ssl_state->curr_connp->bytes_processed) { case 3: if (input_len >= 6) { - ssl_state->curr_connp->session_id_length = input[4] << 8; - ssl_state->curr_connp->session_id_length |= input[5]; + uint16_t session_id_length = input[5] | (input[4] << 8); input += 6; input_len -= 6; ssl_state->curr_connp->bytes_processed += 6; - if (ssl_state->curr_connp->session_id_length == 0) { + if (session_id_length == 0) { ssl_state->current_flags |= SSL_AL_FLAG_SSL_NO_SESSION_ID; } @@ -2085,14 +2081,12 @@ static int SSLv2Decode(uint8_t direction, SSLState *ssl_state, /* fall through */ case 7: - ssl_state->curr_connp->session_id_length = *(input++) << 8; ssl_state->curr_connp->bytes_processed++; if (--input_len == 0) break; /* fall through */ case 8: - ssl_state->curr_connp->session_id_length |= *(input++); ssl_state->curr_connp->bytes_processed++; if (--input_len == 0) break;