Move init_buf and rwstate into SSL3_STATE. This finally clears most of the SSL_clear special-cases. Change-Id: I00fc240ccbf13f4290322845f585ca6f5786ad80 Reviewed-on: https://boringssl-review.googlesource.com/21947 Commit-Queue: David Benjamin <davidben@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org> Reviewed-by: Steven Valdez <svaldez@google.com>
diff --git a/ssl/ssl_lib.cc b/ssl/ssl_lib.cc index c8e6c94..2fc6ffd 100644 --- a/ssl/ssl_lib.cc +++ b/ssl/ssl_lib.cc
@@ -201,7 +201,7 @@ void ssl_reset_error_state(SSL *ssl) { // Functions which use |SSL_get_error| must reset I/O and error state on // entry. - ssl->rwstate = SSL_NOTHING; + ssl->s3->rwstate = SSL_NOTHING; ERR_clear_error(); ERR_clear_system_error(); } @@ -716,8 +716,6 @@ goto err; } - ssl->rwstate = SSL_NOTHING; - CRYPTO_new_ex_data(&ssl->ex_data); ssl->psk_identity_hint = NULL; @@ -762,8 +760,6 @@ BIO_free_all(ssl->rbio); BIO_free_all(ssl->wbio); - BUF_MEM_free(ssl->init_buf); - // add extra stuff ssl_cipher_preference_list_free(ssl->cipher_list); @@ -1240,7 +1236,7 @@ return SSL_ERROR_SYSCALL; } - switch (ssl->rwstate) { + switch (ssl->s3->rwstate) { case SSL_PENDING_SESSION: return SSL_ERROR_PENDING_SESSION; @@ -2294,7 +2290,7 @@ return CRYPTO_get_ex_data(&ctx->ex_data, idx); } -int SSL_want(const SSL *ssl) { return ssl->rwstate; } +int SSL_want(const SSL *ssl) { return ssl->s3->rwstate; } void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx, RSA *(*cb)(SSL *ssl, int is_export, @@ -2578,17 +2574,6 @@ SSL_SESSION_up_ref(session.get()); } - // TODO(davidben): Some state on |ssl| is reset both in |SSL_new| and - // |SSL_clear| because it is per-connection state rather than configuration - // state. Per-connection state should be on |ssl->s3| and |ssl->d1| so it is - // naturally reset at the right points between |SSL_new|, |SSL_clear|, and - // |ssl3_new|. - - ssl->rwstate = SSL_NOTHING; - - BUF_MEM_free(ssl->init_buf); - ssl->init_buf = NULL; - // The ssl->d1->mtu is simultaneously configuration (preserved across // clear) and connection-specific state (gets reset). //