From 9950ebffe63aeab14897a282b81e00dddef59c39 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Fri, 21 Feb 2020 19:26:42 +0100 Subject: [PATCH] ssl: code cleanups --- src/app-layer-ssl.c | 53 ++++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/src/app-layer-ssl.c b/src/app-layer-ssl.c index cde8ebb365..dde63d61a9 100644 --- a/src/app-layer-ssl.c +++ b/src/app-layer-ssl.c @@ -1345,10 +1345,39 @@ end: return 0; } +/** \internal + * \brief setup or grow the `trec` space in the connp + */ +static int EnsureRecordSpace(SSLStateConnp *curr_connp, const uint32_t input_len) +{ + if (curr_connp->trec == NULL) { + curr_connp->trec_len = 2 * curr_connp->record_length + SSLV3_RECORD_HDR_LEN + 1; + curr_connp->trec = SCMalloc(curr_connp->trec_len); + if (unlikely(curr_connp->trec == NULL)) + goto error; + } + + if (curr_connp->trec_pos + input_len >= curr_connp->trec_len) { + curr_connp->trec_len = curr_connp->trec_pos + 2 * input_len + 1; + void *ptmp = SCRealloc(curr_connp->trec, curr_connp->trec_len); + if (unlikely(ptmp == NULL)) { + SCFree(curr_connp->trec); + curr_connp->trec = NULL; + goto error; + } + curr_connp->trec = ptmp; + } + + return 0; +error: + curr_connp->trec_len = 0; + curr_connp->trec_pos = 0; + return -1; +} + static int SSLv3ParseHandshakeType(SSLState *ssl_state, const uint8_t *input, uint32_t input_len, uint8_t direction) { - void *ptmp; const uint8_t *initial_input = input; uint32_t parsed = 0; int rc; @@ -1402,28 +1431,8 @@ static int SSLv3ParseHandshakeType(SSLState *ssl_state, const uint8_t *input, "direction!"); break; } - if (ssl_state->curr_connp->trec == NULL) { - ssl_state->curr_connp->trec_len = - 2 * ssl_state->curr_connp->record_length + - SSLV3_RECORD_HDR_LEN + 1; - ssl_state->curr_connp->trec = - SCMalloc(ssl_state->curr_connp->trec_len); - } - if (ssl_state->curr_connp->trec_pos + input_len >= - ssl_state->curr_connp->trec_len) { - ssl_state->curr_connp->trec_len = - ssl_state->curr_connp->trec_pos + 2 * input_len + 1; - ptmp = SCRealloc(ssl_state->curr_connp->trec, - ssl_state->curr_connp->trec_len); - - if (unlikely(ptmp == NULL)) { - SCFree(ssl_state->curr_connp->trec); - } - ssl_state->curr_connp->trec = ptmp; - } - if (unlikely(ssl_state->curr_connp->trec == NULL)) { - ssl_state->curr_connp->trec_len = 0; + if (EnsureRecordSpace(ssl_state->curr_connp, input_len) < 0) { /* error, skip packet */ parsed += input_len; (void)parsed; /* for scan-build */ -- 2.47.2