From: Matt Caswell Date: Mon, 2 Feb 2015 11:53:20 +0000 (+0000) Subject: Create RECORD_LAYER_clear function. X-Git-Tag: OpenSSL_1_1_0-pre1~1421 X-Git-Url: https://git.openssl.org/?p=openssl.git;a=commitdiff_plain;h=af9752e5faff5dd3c82fc2d02d1e7ad457ccb84a Create RECORD_LAYER_clear function. Reviewed-by: Richard Levitte --- diff --git a/ssl/record/rec_layer.h b/ssl/record/rec_layer.h index 1f6fea15a2..648fd3cdd5 100644 --- a/ssl/record/rec_layer.h +++ b/ssl/record/rec_layer.h @@ -166,6 +166,7 @@ typedef struct record_layer_st { #define RECORD_LAYER_get_rrec(rl) (&(rl)->rrec) #define RECORD_LAYER_get_wrec(rl) (&(rl)->wrec) +void RECORD_LAYER_clear(RECORD_LAYER *rl); __owur int ssl23_read_bytes(SSL *s, int n); __owur int ssl23_write_bytes(SSL *s); __owur int ssl3_write_bytes(SSL *s, int type, const void *buf, int len); diff --git a/ssl/record/s3_pkt.c b/ssl/record/s3_pkt.c index b9d0575301..ec3f0a1fe8 100644 --- a/ssl/record/s3_pkt.c +++ b/ssl/record/s3_pkt.c @@ -132,6 +132,33 @@ # define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0 #endif +void RECORD_LAYER_clear(RECORD_LAYER *rl) +{ + unsigned char *rp, *wp; + size_t rlen, wlen; + int read_ahead; + SSL *s; + + s = rl->s; + read_ahead = rl->read_ahead; + rp = SSL3_BUFFER_get_buf(&rl->rbuf); + rlen = SSL3_BUFFER_get_len(&rl->rbuf); + wp = SSL3_BUFFER_get_buf(&rl->wbuf); + wlen = SSL3_BUFFER_get_len(&rl->wbuf); + memset(rl, 0, sizeof (RECORD_LAYER)); + SSL3_BUFFER_set_buf(&rl->rbuf, rp); + SSL3_BUFFER_set_len(&rl->rbuf, rlen); + SSL3_BUFFER_set_buf(&rl->wbuf, wp); + SSL3_BUFFER_set_len(&rl->wbuf, wlen); + + /* Do I need to do this? As far as I can tell read_ahead did not + * previously get reset by SSL_clear...so I'll keep it that way..but is + * that right? + */ + rl->read_ahead = read_ahead; + rl->s = s; +} + int ssl3_read_n(SSL *s, int n, int max, int extend) { /* diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c index 727f91305f..0298501ada 100644 --- a/ssl/ssl_lib.c +++ b/ssl/ssl_lib.c @@ -189,10 +189,6 @@ SSL3_ENC_METHOD ssl3_undef_enc_method = { int SSL_clear(SSL *s) { - unsigned char *rp, *wp; - size_t rlen, wlen; - int read_ahead; - if (s->method == NULL) { SSLerr(SSL_F_SSL_CLEAR, SSL_R_NO_METHOD_SPECIFIED); return (0); @@ -245,23 +241,7 @@ int SSL_clear(SSL *s) } else s->method->ssl_clear(s); - read_ahead = RECORD_LAYER_get_read_ahead(&s->rlayer); - rp = SSL3_BUFFER_get_buf(RECORD_LAYER_get_rbuf(&s->rlayer)); - rlen = SSL3_BUFFER_get_len(RECORD_LAYER_get_rbuf(&s->rlayer)); - wp = SSL3_BUFFER_get_buf(RECORD_LAYER_get_wbuf(&s->rlayer)); - wlen = SSL3_BUFFER_get_len(RECORD_LAYER_get_wbuf(&s->rlayer)); - memset(&s->rlayer, 0, sizeof s->rlayer); - SSL3_BUFFER_set_buf(RECORD_LAYER_get_rbuf(&s->rlayer), rp); - SSL3_BUFFER_set_len(RECORD_LAYER_get_rbuf(&s->rlayer), rlen); - SSL3_BUFFER_set_buf(RECORD_LAYER_get_wbuf(&s->rlayer), wp); - SSL3_BUFFER_set_len(RECORD_LAYER_get_wbuf(&s->rlayer), wlen); - - /* Do I need to do this? As far as I can tell read_ahead did not - * previously get reset by SSL_clear...so I'll keep it that way..but is - * that right? - */ - RECORD_LAYER_set_read_ahead(&s->rlayer, read_ahead); - RECORD_LAYER_set_ssl(&s->rlayer, s); + RECORD_LAYER_clear(&s->rlayer); return (1); }