From 7604202070b3d3767fe75bc8c5a268ee8aedfb52 Mon Sep 17 00:00:00 2001 From: Matt Caswell Date: Sun, 1 Feb 2015 16:03:18 +0000 Subject: [PATCH] Move SSL3_BUFFER set up and release code into ssl3_buffer.c Reviewed-by: Richard Levitte --- ssl/record/ssl3_buffer.c | 116 +++++++++++++++++++++++++++++++++++++++ ssl/record/ssl3_buffer.h | 6 +- ssl/s3_both.c | 116 --------------------------------------- ssl/ssl_locl.h | 5 -- 4 files changed, 121 insertions(+), 122 deletions(-) diff --git a/ssl/record/ssl3_buffer.c b/ssl/record/ssl3_buffer.c index e5abbd652b..65dcd8a292 100644 --- a/ssl/record/ssl3_buffer.c +++ b/ssl/record/ssl3_buffer.c @@ -125,3 +125,119 @@ void SSL3_BUFFER_release(SSL3_BUFFER *b) OPENSSL_free(b->buf); b->buf = NULL; } + +int ssl3_setup_read_buffer(SSL *s) +{ + unsigned char *p; + size_t len, align = 0, headerlen; + SSL3_BUFFER *b; + + b = RECORD_LAYER_get_rbuf(&s->rlayer); + + if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) + headerlen = DTLS1_RT_HEADER_LENGTH; + else + headerlen = SSL3_RT_HEADER_LENGTH; + +#if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 + align = (-SSL3_RT_HEADER_LENGTH) & (SSL3_ALIGN_PAYLOAD - 1); +#endif + + if (b->buf == NULL) { + len = SSL3_RT_MAX_PLAIN_LENGTH + + SSL3_RT_MAX_ENCRYPTED_OVERHEAD + headerlen + align; + if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER) { + s->s3->init_extra = 1; + len += SSL3_RT_MAX_EXTRA; + } +#ifndef OPENSSL_NO_COMP + if (ssl_allow_compression(s)) + len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; +#endif + if ((p = OPENSSL_malloc(len)) == NULL) + goto err; + b->buf = p; + b->len = len; + } + + s->packet = &(b->buf[0]); + return 1; + + err: + SSLerr(SSL_F_SSL3_SETUP_READ_BUFFER, ERR_R_MALLOC_FAILURE); + return 0; +} + +int ssl3_setup_write_buffer(SSL *s) +{ + unsigned char *p; + size_t len, align = 0, headerlen; + SSL3_BUFFER *wb; + + wb = RECORD_LAYER_get_wbuf(&s->rlayer); + + if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) + headerlen = DTLS1_RT_HEADER_LENGTH + 1; + else + headerlen = SSL3_RT_HEADER_LENGTH; + +#if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 + align = (-SSL3_RT_HEADER_LENGTH) & (SSL3_ALIGN_PAYLOAD - 1); +#endif + + if (wb->buf == NULL) { + len = s->max_send_fragment + + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD + headerlen + align; +#ifndef OPENSSL_NO_COMP + if (ssl_allow_compression(s)) + len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; +#endif + if (!(s->options & SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS)) + len += headerlen + align + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD; + + if ((p = OPENSSL_malloc(len)) == NULL) + goto err; + wb->buf = p; + wb->len = len; + } + + return 1; + + err: + SSLerr(SSL_F_SSL3_SETUP_WRITE_BUFFER, ERR_R_MALLOC_FAILURE); + return 0; +} + +int ssl3_setup_buffers(SSL *s) +{ + if (!ssl3_setup_read_buffer(s)) + return 0; + if (!ssl3_setup_write_buffer(s)) + return 0; + return 1; +} + +int ssl3_release_write_buffer(SSL *s) +{ + SSL3_BUFFER *wb; + + wb = RECORD_LAYER_get_wbuf(&s->rlayer); + + if (wb->buf != NULL) { + OPENSSL_free(wb->buf); + wb->buf = NULL; + } + return 1; +} + +int ssl3_release_read_buffer(SSL *s) +{ + SSL3_BUFFER *b; + + b = RECORD_LAYER_get_rbuf(&s->rlayer); + if (b->buf != NULL) { + OPENSSL_free(b->buf); + b->buf = NULL; + } + return 1; +} diff --git a/ssl/record/ssl3_buffer.h b/ssl/record/ssl3_buffer.h index 0eb5d0020d..4668f4507a 100644 --- a/ssl/record/ssl3_buffer.h +++ b/ssl/record/ssl3_buffer.h @@ -129,4 +129,8 @@ typedef struct ssl3_buffer_st { void SSL3_BUFFER_set_data(SSL3_BUFFER *b, unsigned char *d, int n); void SSL3_BUFFER_release(SSL3_BUFFER *b); - +__owur int ssl3_setup_buffers(SSL *s); +__owur int ssl3_setup_read_buffer(SSL *s); +__owur int ssl3_setup_write_buffer(SSL *s); +int ssl3_release_read_buffer(SSL *s); +int ssl3_release_write_buffer(SSL *s); diff --git a/ssl/s3_both.c b/ssl/s3_both.c index d67be913c2..c8f5727019 100644 --- a/ssl/s3_both.c +++ b/ssl/s3_both.c @@ -573,122 +573,6 @@ int ssl_verify_alarm_type(long type) return (al); } -int ssl3_setup_read_buffer(SSL *s) -{ - unsigned char *p; - size_t len, align = 0, headerlen; - SSL3_BUFFER *b; - - b = RECORD_LAYER_get_rbuf(&s->rlayer); - - if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) - headerlen = DTLS1_RT_HEADER_LENGTH; - else - headerlen = SSL3_RT_HEADER_LENGTH; - -#if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 - align = (-SSL3_RT_HEADER_LENGTH) & (SSL3_ALIGN_PAYLOAD - 1); -#endif - - if (b->buf == NULL) { - len = SSL3_RT_MAX_PLAIN_LENGTH - + SSL3_RT_MAX_ENCRYPTED_OVERHEAD + headerlen + align; - if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER) { - s->s3->init_extra = 1; - len += SSL3_RT_MAX_EXTRA; - } -#ifndef OPENSSL_NO_COMP - if (ssl_allow_compression(s)) - len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; -#endif - if ((p = OPENSSL_malloc(len)) == NULL) - goto err; - b->buf = p; - b->len = len; - } - - s->packet = &(b->buf[0]); - return 1; - - err: - SSLerr(SSL_F_SSL3_SETUP_READ_BUFFER, ERR_R_MALLOC_FAILURE); - return 0; -} - -int ssl3_setup_write_buffer(SSL *s) -{ - unsigned char *p; - size_t len, align = 0, headerlen; - SSL3_BUFFER *wb; - - wb = RECORD_LAYER_get_wbuf(&s->rlayer); - - if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) - headerlen = DTLS1_RT_HEADER_LENGTH + 1; - else - headerlen = SSL3_RT_HEADER_LENGTH; - -#if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 - align = (-SSL3_RT_HEADER_LENGTH) & (SSL3_ALIGN_PAYLOAD - 1); -#endif - - if (wb->buf == NULL) { - len = s->max_send_fragment - + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD + headerlen + align; -#ifndef OPENSSL_NO_COMP - if (ssl_allow_compression(s)) - len += SSL3_RT_MAX_COMPRESSED_OVERHEAD; -#endif - if (!(s->options & SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS)) - len += headerlen + align + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD; - - if ((p = OPENSSL_malloc(len)) == NULL) - goto err; - wb->buf = p; - wb->len = len; - } - - return 1; - - err: - SSLerr(SSL_F_SSL3_SETUP_WRITE_BUFFER, ERR_R_MALLOC_FAILURE); - return 0; -} - -int ssl3_setup_buffers(SSL *s) -{ - if (!ssl3_setup_read_buffer(s)) - return 0; - if (!ssl3_setup_write_buffer(s)) - return 0; - return 1; -} - -int ssl3_release_write_buffer(SSL *s) -{ - SSL3_BUFFER *wb; - - wb = RECORD_LAYER_get_wbuf(&s->rlayer); - - if (wb->buf != NULL) { - OPENSSL_free(wb->buf); - wb->buf = NULL; - } - return 1; -} - -int ssl3_release_read_buffer(SSL *s) -{ - SSL3_BUFFER *b; - - b = RECORD_LAYER_get_rbuf(&s->rlayer); - if (b->buf != NULL) { - OPENSSL_free(b->buf); - b->buf = NULL; - } - return 1; -} - int ssl_allow_compression(SSL *s) { if (s->options & SSL_OP_NO_COMPRESSION) diff --git a/ssl/ssl_locl.h b/ssl/ssl_locl.h index 04261906ec..9a366554be 100644 --- a/ssl/ssl_locl.h +++ b/ssl/ssl_locl.h @@ -2101,11 +2101,6 @@ void ssl3_free_digest_list(SSL *s); __owur unsigned long ssl3_output_cert_chain(SSL *s, CERT_PKEY *cpk); __owur SSL_CIPHER *ssl3_choose_cipher(SSL *ssl, STACK_OF(SSL_CIPHER) *clnt, STACK_OF(SSL_CIPHER) *srvr); -__owur int ssl3_setup_buffers(SSL *s); -__owur int ssl3_setup_read_buffer(SSL *s); -__owur int ssl3_setup_write_buffer(SSL *s); -int ssl3_release_read_buffer(SSL *s); -int ssl3_release_write_buffer(SSL *s); __owur int ssl3_digest_cached_records(SSL *s); __owur int ssl3_new(SSL *s); void ssl3_free(SSL *s); -- 2.40.0