Handle failures in ssl3_finish_mac. It may fail because the BIO_write to the memory BIO can allocate. Unfortunately, this bubbles up pretty far up now that we've moved the handshake hash to ssl3_set_handshake_header. Change-Id: I58884347a4456bb974ac4783078131522167e29d Reviewed-on: https://boringssl-review.googlesource.com/3483 Reviewed-by: Adam Langley <agl@google.com>
diff --git a/ssl/d1_lib.c b/ssl/d1_lib.c index dcf86e5..6d2f77f 100644 --- a/ssl/d1_lib.c +++ b/ssl/d1_lib.c
@@ -82,7 +82,7 @@ static void get_current_time(SSL *ssl, OPENSSL_timeval *out_clock); static OPENSSL_timeval *dtls1_get_timeout(SSL *s, OPENSSL_timeval *timeleft); -static void dtls1_set_handshake_header(SSL *s, int type, unsigned long len); +static int dtls1_set_handshake_header(SSL *s, int type, unsigned long len); static int dtls1_handshake_write(SSL *s); const SSL3_ENC_METHOD DTLSv1_enc_data = { @@ -415,7 +415,7 @@ #endif } -static void dtls1_set_handshake_header(SSL *s, int htype, unsigned long len) { +static int dtls1_set_handshake_header(SSL *s, int htype, unsigned long len) { uint8_t *message = (uint8_t *)s->init_buf->data; const struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr; uint8_t serialised_header[DTLS1_HM_HEADER_LENGTH]; @@ -438,8 +438,8 @@ s2n(msg_hdr->seq, p); l2n3(0, p); l2n3(msg_hdr->msg_len, p); - ssl3_finish_mac(s, serialised_header, sizeof(serialised_header)); - ssl3_finish_mac(s, message + DTLS1_HM_HEADER_LENGTH, len); + return ssl3_finish_mac(s, serialised_header, sizeof(serialised_header)) && + ssl3_finish_mac(s, message + DTLS1_HM_HEADER_LENGTH, len); } static int dtls1_handshake_write(SSL *s) {