SSL: refactor all SSLfatal() calls

Since SSLfatal() doesn't take a function code any more, we drop that
argument everywhere.  Also, we convert all combinations of SSLfatal()
and ERR_add_data() to an SSLfatal_data() call.

Reviewed-by: Paul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/13316)
This commit is contained in:
Richard Levitte 2020-11-04 14:39:57 +01:00
parent e92519b5a6
commit c48ffbcca1
27 changed files with 1055 additions and 2181 deletions

View File

@ -378,8 +378,7 @@ int dtls1_check_timeout_num(SSL *s)
if (s->d1->timeout.num_alerts > DTLS1_TMO_ALERT_COUNT) { if (s->d1->timeout.num_alerts > DTLS1_TMO_ALERT_COUNT) {
/* fail the connection, enough alerts have been sent */ /* fail the connection, enough alerts have been sent */
SSLfatal(s, SSL_AD_NO_ALERT, 0, SSLfatal(s, SSL_AD_NO_ALERT, SSL_R_READ_TIMEOUT_EXPIRED);
SSL_R_READ_TIMEOUT_EXPIRED);
return -1; return -1;
} }

View File

@ -154,8 +154,7 @@ int dtls1_buffer_record(SSL *s, record_pqueue *queue, unsigned char *priority)
if (rdata == NULL || item == NULL) { if (rdata == NULL || item == NULL) {
OPENSSL_free(rdata); OPENSSL_free(rdata);
pitem_free(item); pitem_free(item);
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DTLS1_BUFFER_RECORD, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return -1; return -1;
} }
@ -263,9 +262,7 @@ int dtls1_process_buffered_records(SSL *s)
* current record is from a different epoch. But that cannot * current record is from a different epoch. But that cannot
* be the case because we already checked the epoch above * be the case because we already checked the epoch above
*/ */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS,
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
#ifndef OPENSSL_NO_SCTP #ifndef OPENSSL_NO_SCTP
@ -359,8 +356,7 @@ int dtls1_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
if ((type && (type != SSL3_RT_APPLICATION_DATA) && if ((type && (type != SSL3_RT_APPLICATION_DATA) &&
(type != SSL3_RT_HANDSHAKE)) || (type != SSL3_RT_HANDSHAKE)) ||
(peek && (type != SSL3_RT_APPLICATION_DATA))) { (peek && (type != SSL3_RT_APPLICATION_DATA))) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DTLS1_READ_BYTES, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return -1; return -1;
} }
@ -489,7 +485,7 @@ int dtls1_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
*/ */
if (SSL_in_init(s) && (type == SSL3_RT_APPLICATION_DATA) && if (SSL_in_init(s) && (type == SSL3_RT_APPLICATION_DATA) &&
(s->enc_read_ctx == NULL)) { (s->enc_read_ctx == NULL)) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_DTLS1_READ_BYTES, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
SSL_R_APP_DATA_IN_HANDSHAKE); SSL_R_APP_DATA_IN_HANDSHAKE);
return -1; return -1;
} }
@ -560,8 +556,7 @@ int dtls1_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
|| !PACKET_get_1(&alert, &alert_level) || !PACKET_get_1(&alert, &alert_level)
|| !PACKET_get_1(&alert, &alert_descr) || !PACKET_get_1(&alert, &alert_descr)
|| PACKET_remaining(&alert) != 0) { || PACKET_remaining(&alert) != 0) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_DTLS1_READ_BYTES, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_INVALID_ALERT);
SSL_R_INVALID_ALERT);
return -1; return -1;
} }
@ -585,7 +580,7 @@ int dtls1_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
s->rlayer.alert_count++; s->rlayer.alert_count++;
if (s->rlayer.alert_count == MAX_WARN_ALERT_COUNT) { if (s->rlayer.alert_count == MAX_WARN_ALERT_COUNT) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_DTLS1_READ_BYTES, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
SSL_R_TOO_MANY_WARN_ALERTS); SSL_R_TOO_MANY_WARN_ALERTS);
return -1; return -1;
} }
@ -610,21 +605,17 @@ int dtls1_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
return 0; return 0;
} }
} else if (alert_level == SSL3_AL_FATAL) { } else if (alert_level == SSL3_AL_FATAL) {
char tmp[16];
s->rwstate = SSL_NOTHING; s->rwstate = SSL_NOTHING;
s->s3.fatal_alert = alert_descr; s->s3.fatal_alert = alert_descr;
SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_DTLS1_READ_BYTES, SSLfatal_data(s, SSL_AD_NO_ALERT,
SSL_AD_REASON_OFFSET + alert_descr); SSL_AD_REASON_OFFSET + alert_descr,
BIO_snprintf(tmp, sizeof tmp, "%d", alert_descr); "SSL alert number %d", alert_descr);
ERR_add_error_data(2, "SSL alert number ", tmp);
s->shutdown |= SSL_RECEIVED_SHUTDOWN; s->shutdown |= SSL_RECEIVED_SHUTDOWN;
SSL3_RECORD_set_read(rr); SSL3_RECORD_set_read(rr);
SSL_CTX_remove_session(s->session_ctx, s->session); SSL_CTX_remove_session(s->session_ctx, s->session);
return 0; return 0;
} else { } else {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_DTLS1_READ_BYTES, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_UNKNOWN_ALERT_TYPE);
SSL_R_UNKNOWN_ALERT_TYPE);
return -1; return -1;
} }
@ -708,8 +699,7 @@ int dtls1_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
* finished * finished
*/ */
if (!ossl_assert(SSL_is_init_finished(s))) { if (!ossl_assert(SSL_is_init_finished(s))) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DTLS1_READ_BYTES, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return -1; return -1;
} }
@ -745,8 +735,7 @@ int dtls1_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
switch (SSL3_RECORD_get_type(rr)) { switch (SSL3_RECORD_get_type(rr)) {
default: default:
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_DTLS1_READ_BYTES, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_UNEXPECTED_RECORD);
SSL_R_UNEXPECTED_RECORD);
return -1; return -1;
case SSL3_RT_CHANGE_CIPHER_SPEC: case SSL3_RT_CHANGE_CIPHER_SPEC:
case SSL3_RT_ALERT: case SSL3_RT_ALERT:
@ -756,8 +745,7 @@ int dtls1_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
* SSL3_RT_HANDSHAKE when ossl_statem_get_in_handshake(s) is true, but * SSL3_RT_HANDSHAKE when ossl_statem_get_in_handshake(s) is true, but
* that should not happen when type != rr->type * that should not happen when type != rr->type
*/ */
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_DTLS1_READ_BYTES, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return -1; return -1;
case SSL3_RT_APPLICATION_DATA: case SSL3_RT_APPLICATION_DATA:
/* /*
@ -773,8 +761,7 @@ int dtls1_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
s->s3.in_read_app_data = 2; s->s3.in_read_app_data = 2;
return -1; return -1;
} else { } else {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_DTLS1_READ_BYTES, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_UNEXPECTED_RECORD);
SSL_R_UNEXPECTED_RECORD);
return -1; return -1;
} }
} }
@ -791,8 +778,7 @@ int dtls1_write_bytes(SSL *s, int type, const void *buf, size_t len,
int i; int i;
if (!ossl_assert(len <= SSL3_RT_MAX_PLAIN_LENGTH)) { if (!ossl_assert(len <= SSL3_RT_MAX_PLAIN_LENGTH)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DTLS1_WRITE_BYTES, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return -1; return -1;
} }
s->rwstate = SSL_NOTHING; s->rwstate = SSL_NOTHING;
@ -818,8 +804,7 @@ int do_dtls1_write(SSL *s, int type, const unsigned char *buf,
* will happen with non blocking IO * will happen with non blocking IO
*/ */
if (!ossl_assert(SSL3_BUFFER_get_left(wb) == 0)) { if (!ossl_assert(SSL3_BUFFER_get_left(wb) == 0)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_DTLS1_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -835,8 +820,7 @@ int do_dtls1_write(SSL *s, int type, const unsigned char *buf,
return 0; return 0;
if (len > ssl_get_max_send_fragment(s)) { if (len > ssl_get_max_send_fragment(s)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_DTLS1_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE);
SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE);
return 0; return 0;
} }
@ -851,7 +835,7 @@ int do_dtls1_write(SSL *s, int type, const unsigned char *buf,
else { else {
mac_size = EVP_MD_CTX_size(s->write_hash); mac_size = EVP_MD_CTX_size(s->write_hash);
if (mac_size < 0) { if (mac_size < 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_DTLS1_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR,
SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE); SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE);
return -1; return -1;
} }
@ -911,8 +895,7 @@ int do_dtls1_write(SSL *s, int type, const unsigned char *buf,
/* first we compress */ /* first we compress */
if (s->compress != NULL) { if (s->compress != NULL) {
if (!ssl3_do_compress(s, &wr)) { if (!ssl3_do_compress(s, &wr)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_DTLS1_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_COMPRESSION_FAILURE);
SSL_R_COMPRESSION_FAILURE);
return -1; return -1;
} }
} else { } else {
@ -931,8 +914,7 @@ int do_dtls1_write(SSL *s, int type, const unsigned char *buf,
if (!s->method->ssl3_enc->mac(s, &wr, if (!s->method->ssl3_enc->mac(s, &wr,
&(p[SSL3_RECORD_get_length(&wr) + eivlen]), &(p[SSL3_RECORD_get_length(&wr) + eivlen]),
1)) { 1)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_DTLS1_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return -1; return -1;
} }
SSL3_RECORD_add_length(&wr, mac_size); SSL3_RECORD_add_length(&wr, mac_size);
@ -947,8 +929,7 @@ int do_dtls1_write(SSL *s, int type, const unsigned char *buf,
if (s->method->ssl3_enc->enc(s, &wr, 1, 1, NULL, mac_size) < 1) { if (s->method->ssl3_enc->enc(s, &wr, 1, 1, NULL, mac_size) < 1) {
if (!ossl_statem_in_error(s)) { if (!ossl_statem_in_error(s)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_DTLS1_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
} }
return -1; return -1;
} }
@ -956,8 +937,7 @@ int do_dtls1_write(SSL *s, int type, const unsigned char *buf,
if (SSL_WRITE_ETM(s) && mac_size != 0) { if (SSL_WRITE_ETM(s) && mac_size != 0) {
if (!s->method->ssl3_enc->mac(s, &wr, if (!s->method->ssl3_enc->mac(s, &wr,
&(p[SSL3_RECORD_get_length(&wr)]), 1)) { &(p[SSL3_RECORD_get_length(&wr)]), 1)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_DTLS1_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return -1; return -1;
} }
SSL3_RECORD_add_length(&wr, mac_size); SSL3_RECORD_add_length(&wr, mac_size);

View File

@ -263,8 +263,7 @@ int ssl3_read_n(SSL *s, size_t n, size_t max, int extend, int clearold,
if (n > rb->len - rb->offset) { if (n > rb->len - rb->offset) {
/* does not happen */ /* does not happen */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_READ_N, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return -1; return -1;
} }
@ -307,13 +306,12 @@ int ssl3_read_n(SSL *s, size_t n, size_t max, int extend, int clearold,
SSL_set_shutdown(s, SSL_RECEIVED_SHUTDOWN); SSL_set_shutdown(s, SSL_RECEIVED_SHUTDOWN);
s->s3.warn_alert = SSL_AD_CLOSE_NOTIFY; s->s3.warn_alert = SSL_AD_CLOSE_NOTIFY;
} else { } else {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL3_READ_N, SSLfatal(s, SSL_AD_DECODE_ERROR,
SSL_R_UNEXPECTED_EOF_WHILE_READING); SSL_R_UNEXPECTED_EOF_WHILE_READING);
} }
} }
} else { } else {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_READ_N, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_READ_BIO_NOT_SET);
SSL_R_READ_BIO_NOT_SET);
ret = -1; ret = -1;
} }
@ -375,8 +373,7 @@ int ssl3_write_bytes(SSL *s, int type, const void *buf_, size_t len,
*/ */
if ((len < s->rlayer.wnum) if ((len < s->rlayer.wnum)
|| ((wb->left != 0) && (len < (s->rlayer.wnum + s->rlayer.wpend_tot)))) { || ((wb->left != 0) && (len < (s->rlayer.wnum + s->rlayer.wpend_tot)))) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_WRITE_BYTES, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_BAD_LENGTH);
SSL_R_BAD_LENGTH);
return -1; return -1;
} }
@ -584,8 +581,7 @@ int ssl3_write_bytes(SSL *s, int type, const void *buf_, size_t len,
* We should have prevented this when we set max_pipelines so we * We should have prevented this when we set max_pipelines so we
* shouldn't get here * shouldn't get here
*/ */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_WRITE_BYTES, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return -1; return -1;
} }
if (maxpipes == 0 if (maxpipes == 0
@ -600,8 +596,7 @@ int ssl3_write_bytes(SSL *s, int type, const void *buf_, size_t len,
* We should have prevented this when we set/get the split and max send * We should have prevented this when we set/get the split and max send
* fragments so we shouldn't get here * fragments so we shouldn't get here
*/ */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_WRITE_BYTES, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return -1; return -1;
} }
@ -726,8 +721,7 @@ int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
/* TODO(siz_t): Convert me */ /* TODO(siz_t): Convert me */
mac_size = EVP_MD_CTX_size(s->write_hash); mac_size = EVP_MD_CTX_size(s->write_hash);
if (mac_size < 0) { if (mac_size < 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
} }
@ -760,8 +754,7 @@ int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
if (prefix_len > if (prefix_len >
(SSL3_RT_HEADER_LENGTH + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD)) { (SSL3_RT_HEADER_LENGTH + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD)) {
/* insufficient space */ /* insufficient space */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
} }
@ -797,8 +790,7 @@ int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
if (!WPACKET_init_static_len(&pkt[0], SSL3_BUFFER_get_buf(wb), if (!WPACKET_init_static_len(&pkt[0], SSL3_BUFFER_get_buf(wb),
SSL3_BUFFER_get_len(wb), 0) SSL3_BUFFER_get_len(wb), 0)
|| !WPACKET_allocate_bytes(&pkt[0], align, NULL)) { || !WPACKET_allocate_bytes(&pkt[0], align, NULL)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
wpinited = 1; wpinited = 1;
@ -809,8 +801,7 @@ int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
SSL3_BUFFER_get_len(wb), 0) SSL3_BUFFER_get_len(wb), 0)
|| !WPACKET_allocate_bytes(&pkt[0], SSL3_BUFFER_get_offset(wb) || !WPACKET_allocate_bytes(&pkt[0], SSL3_BUFFER_get_offset(wb)
+ prefix_len, NULL)) { + prefix_len, NULL)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
wpinited = 1; wpinited = 1;
@ -827,8 +818,7 @@ int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
if (!WPACKET_init_static_len(thispkt, SSL3_BUFFER_get_buf(wb), if (!WPACKET_init_static_len(thispkt, SSL3_BUFFER_get_buf(wb),
SSL3_BUFFER_get_len(wb), 0) SSL3_BUFFER_get_len(wb), 0)
|| !WPACKET_allocate_bytes(thispkt, align, NULL)) { || !WPACKET_allocate_bytes(thispkt, align, NULL)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
wpinited++; wpinited++;
@ -907,8 +897,7 @@ int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
|| (maxcomplen > 0 || (maxcomplen > 0
&& !WPACKET_reserve_bytes(thispkt, maxcomplen, && !WPACKET_reserve_bytes(thispkt, maxcomplen,
&compressdata)))) { &compressdata)))) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -927,8 +916,7 @@ int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
if (s->compress != NULL) { if (s->compress != NULL) {
if (!ssl3_do_compress(s, thiswr) if (!ssl3_do_compress(s, thiswr)
|| !WPACKET_allocate_bytes(thispkt, thiswr->length, NULL)) { || !WPACKET_allocate_bytes(thispkt, thiswr->length, NULL)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_COMPRESSION_FAILURE);
SSL_R_COMPRESSION_FAILURE);
goto err; goto err;
} }
} else { } else {
@ -936,8 +924,7 @@ int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
SSL3_RECORD_reset_data(&wr[j]); SSL3_RECORD_reset_data(&wr[j]);
} else { } else {
if (!WPACKET_memcpy(thispkt, thiswr->input, thiswr->length)) { if (!WPACKET_memcpy(thispkt, thiswr->input, thiswr->length)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
SSL3_RECORD_reset_input(&wr[j]); SSL3_RECORD_reset_input(&wr[j]);
@ -952,8 +939,7 @@ int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
size_t rlen, max_send_fragment; size_t rlen, max_send_fragment;
if (!WPACKET_put_bytes_u8(thispkt, type)) { if (!WPACKET_put_bytes_u8(thispkt, type)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
SSL3_RECORD_add_length(thiswr, 1); SSL3_RECORD_add_length(thiswr, 1);
@ -986,7 +972,7 @@ int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
if (padding > max_padding) if (padding > max_padding)
padding = max_padding; padding = max_padding;
if (!WPACKET_memset(thispkt, 0, padding)) { if (!WPACKET_memset(thispkt, 0, padding)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR,
ERR_R_INTERNAL_ERROR); ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -1006,8 +992,7 @@ int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
if (!WPACKET_allocate_bytes(thispkt, mac_size, &mac) if (!WPACKET_allocate_bytes(thispkt, mac_size, &mac)
|| !s->method->ssl3_enc->mac(s, thiswr, mac, 1)) { || !s->method->ssl3_enc->mac(s, thiswr, mac, 1)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
} }
@ -1026,8 +1011,7 @@ int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
* sub-packet * sub-packet
*/ */
|| !WPACKET_get_length(thispkt, &len)) { || !WPACKET_get_length(thispkt, &len)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -1046,8 +1030,7 @@ int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
*/ */
if (tls13_enc(s, wr, numpipes, 1, NULL, mac_size) < 1) { if (tls13_enc(s, wr, numpipes, 1, NULL, mac_size) < 1) {
if (!ossl_statem_in_error(s)) { if (!ossl_statem_in_error(s)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
} }
goto err; goto err;
} }
@ -1056,8 +1039,7 @@ int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
if (s->method->ssl3_enc->enc(s, wr, numpipes, 1, NULL, if (s->method->ssl3_enc->enc(s, wr, numpipes, 1, NULL,
mac_size) < 1) { mac_size) < 1) {
if (!ossl_statem_in_error(s)) { if (!ossl_statem_in_error(s)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
} }
goto err; goto err;
} }
@ -1081,8 +1063,7 @@ int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
&& !WPACKET_allocate_bytes(thispkt, && !WPACKET_allocate_bytes(thispkt,
thiswr->length - origlen, thiswr->length - origlen,
NULL))) { NULL))) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
if (SSL_WRITE_ETM(s) && mac_size != 0) { if (SSL_WRITE_ETM(s) && mac_size != 0) {
@ -1090,8 +1071,7 @@ int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
if (!WPACKET_allocate_bytes(thispkt, mac_size, &mac) if (!WPACKET_allocate_bytes(thispkt, mac_size, &mac)
|| !s->method->ssl3_enc->mac(s, thiswr, mac, 1)) { || !s->method->ssl3_enc->mac(s, thiswr, mac, 1)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
SSL3_RECORD_add_length(thiswr, mac_size); SSL3_RECORD_add_length(thiswr, mac_size);
@ -1099,8 +1079,7 @@ int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
if (!WPACKET_get_length(thispkt, &len) if (!WPACKET_get_length(thispkt, &len)
|| !WPACKET_close(thispkt)) { || !WPACKET_close(thispkt)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -1120,8 +1099,7 @@ int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
} }
if (!WPACKET_finish(thispkt)) { if (!WPACKET_finish(thispkt)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -1135,8 +1113,7 @@ int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
*/ */
if (j > 0) { if (j > 0) {
/* We should never be pipelining an empty fragment!! */ /* We should never be pipelining an empty fragment!! */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
*written = SSL3_RECORD_get_length(thiswr); *written = SSL3_RECORD_get_length(thiswr);
@ -1189,8 +1166,7 @@ int ssl3_write_pending(SSL *s, int type, const unsigned char *buf, size_t len,
|| (!(s->mode & SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER) || (!(s->mode & SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER)
&& (s->rlayer.wpend_buf != buf)) && (s->rlayer.wpend_buf != buf))
|| (s->rlayer.wpend_type != type)) { || (s->rlayer.wpend_type != type)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_WRITE_PENDING, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_BAD_WRITE_RETRY);
SSL_R_BAD_WRITE_RETRY);
return -1; return -1;
} }
@ -1227,8 +1203,7 @@ int ssl3_write_pending(SSL *s, int type, const unsigned char *buf, size_t len,
if (i >= 0) if (i >= 0)
tmpwrit = i; tmpwrit = i;
} else { } else {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_WRITE_PENDING, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_BIO_NOT_SET);
SSL_R_BIO_NOT_SET);
i = -1; i = -1;
} }
if (i > 0 && tmpwrit == SSL3_BUFFER_get_left(&wb[currbuf])) { if (i > 0 && tmpwrit == SSL3_BUFFER_get_left(&wb[currbuf])) {
@ -1307,8 +1282,7 @@ int ssl3_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
&& (type != SSL3_RT_HANDSHAKE)) || (peek && (type != SSL3_RT_HANDSHAKE)) || (peek
&& (type != && (type !=
SSL3_RT_APPLICATION_DATA))) { SSL3_RT_APPLICATION_DATA))) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_READ_BYTES, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return -1; return -1;
} }
@ -1375,8 +1349,7 @@ int ssl3_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
num_recs = RECORD_LAYER_get_numrpipes(&s->rlayer); num_recs = RECORD_LAYER_get_numrpipes(&s->rlayer);
if (num_recs == 0) { if (num_recs == 0) {
/* Shouldn't happen */ /* Shouldn't happen */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_READ_BYTES, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return -1; return -1;
} }
} }
@ -1395,7 +1368,7 @@ int ssl3_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
if (s->rlayer.handshake_fragment_len > 0 if (s->rlayer.handshake_fragment_len > 0
&& SSL3_RECORD_get_type(rr) != SSL3_RT_HANDSHAKE && SSL3_RECORD_get_type(rr) != SSL3_RT_HANDSHAKE
&& SSL_IS_TLS13(s)) { && SSL_IS_TLS13(s)) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA); SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA);
return -1; return -1;
} }
@ -1413,7 +1386,7 @@ int ssl3_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
if (s->s3.change_cipher_spec /* set when we receive ChangeCipherSpec, if (s->s3.change_cipher_spec /* set when we receive ChangeCipherSpec,
* reset by ssl3_get_finished */ * reset by ssl3_get_finished */
&& (SSL3_RECORD_get_type(rr) != SSL3_RT_HANDSHAKE)) { && (SSL3_RECORD_get_type(rr) != SSL3_RT_HANDSHAKE)) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
SSL_R_DATA_BETWEEN_CCS_AND_FINISHED); SSL_R_DATA_BETWEEN_CCS_AND_FINISHED);
return -1; return -1;
} }
@ -1443,16 +1416,14 @@ int ssl3_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
*/ */
if (SSL_in_init(s) && (type == SSL3_RT_APPLICATION_DATA) && if (SSL_in_init(s) && (type == SSL3_RT_APPLICATION_DATA) &&
(s->enc_read_ctx == NULL)) { (s->enc_read_ctx == NULL)) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_APP_DATA_IN_HANDSHAKE);
SSL_R_APP_DATA_IN_HANDSHAKE);
return -1; return -1;
} }
if (type == SSL3_RT_HANDSHAKE if (type == SSL3_RT_HANDSHAKE
&& SSL3_RECORD_get_type(rr) == SSL3_RT_CHANGE_CIPHER_SPEC && SSL3_RECORD_get_type(rr) == SSL3_RT_CHANGE_CIPHER_SPEC
&& s->rlayer.handshake_fragment_len > 0) { && s->rlayer.handshake_fragment_len > 0) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_CCS_RECEIVED_EARLY);
SSL_R_CCS_RECEIVED_EARLY);
return -1; return -1;
} }
@ -1530,8 +1501,7 @@ int ssl3_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
* initial ClientHello. Therefore |type| should always be equal to * initial ClientHello. Therefore |type| should always be equal to
* |rr->type|. If not then something has gone horribly wrong * |rr->type|. If not then something has gone horribly wrong
*/ */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_READ_BYTES, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return -1; return -1;
} }
@ -1544,8 +1514,7 @@ int ssl3_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
* if we are a server. * if we are a server.
*/ */
s->version = rr->rec_version; s->version = rr->rec_version;
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_UNEXPECTED_MESSAGE);
SSL_R_UNEXPECTED_MESSAGE);
return -1; return -1;
} }
@ -1564,8 +1533,7 @@ int ssl3_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
|| !PACKET_get_1(&alert, &alert_level) || !PACKET_get_1(&alert, &alert_level)
|| !PACKET_get_1(&alert, &alert_descr) || !PACKET_get_1(&alert, &alert_descr)
|| PACKET_remaining(&alert) != 0) { || PACKET_remaining(&alert) != 0) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_INVALID_ALERT);
SSL_R_INVALID_ALERT);
return -1; return -1;
} }
@ -1590,7 +1558,7 @@ int ssl3_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
s->rlayer.alert_count++; s->rlayer.alert_count++;
if (s->rlayer.alert_count == MAX_WARN_ALERT_COUNT) { if (s->rlayer.alert_count == MAX_WARN_ALERT_COUNT) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
SSL_R_TOO_MANY_WARN_ALERTS); SSL_R_TOO_MANY_WARN_ALERTS);
return -1; return -1;
} }
@ -1607,14 +1575,11 @@ int ssl3_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
s->shutdown |= SSL_RECEIVED_SHUTDOWN; s->shutdown |= SSL_RECEIVED_SHUTDOWN;
return 0; return 0;
} else if (alert_level == SSL3_AL_FATAL || is_tls13) { } else if (alert_level == SSL3_AL_FATAL || is_tls13) {
char tmp[16];
s->rwstate = SSL_NOTHING; s->rwstate = SSL_NOTHING;
s->s3.fatal_alert = alert_descr; s->s3.fatal_alert = alert_descr;
SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_SSL3_READ_BYTES, SSLfatal_data(s, SSL_AD_NO_ALERT,
SSL_AD_REASON_OFFSET + alert_descr); SSL_AD_REASON_OFFSET + alert_descr,
BIO_snprintf(tmp, sizeof tmp, "%d", alert_descr); "SSL alert number %d", alert_descr);
ERR_add_error_data(2, "SSL alert number ", tmp);
s->shutdown |= SSL_RECEIVED_SHUTDOWN; s->shutdown |= SSL_RECEIVED_SHUTDOWN;
SSL3_RECORD_set_read(rr); SSL3_RECORD_set_read(rr);
SSL_CTX_remove_session(s->session_ctx, s->session); SSL_CTX_remove_session(s->session_ctx, s->session);
@ -1628,16 +1593,14 @@ int ssl3_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
* future we might have a renegotiation where we don't care if * future we might have a renegotiation where we don't care if
* the peer refused it where we carry on. * the peer refused it where we carry on.
*/ */
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_SSL3_READ_BYTES, SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_NO_RENEGOTIATION);
SSL_R_NO_RENEGOTIATION);
return -1; return -1;
} else if (alert_level == SSL3_AL_WARNING) { } else if (alert_level == SSL3_AL_WARNING) {
/* We ignore any other warning alert in TLSv1.2 and below */ /* We ignore any other warning alert in TLSv1.2 and below */
goto start; goto start;
} }
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_SSL3_READ_BYTES, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_UNKNOWN_ALERT_TYPE);
SSL_R_UNKNOWN_ALERT_TYPE);
return -1; return -1;
} }
@ -1675,7 +1638,7 @@ int ssl3_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
*/ */
SSL3_RECORD_set_length(rr, 0); SSL3_RECORD_set_length(rr, 0);
SSL3_RECORD_set_read(rr); SSL3_RECORD_set_read(rr);
SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_SSL3_READ_BYTES, SSLfatal(s, SSL_AD_NO_ALERT,
SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY); SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY);
return -1; return -1;
} }
@ -1710,8 +1673,7 @@ int ssl3_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
} }
if (SSL3_RECORD_get_type(rr) == SSL3_RT_CHANGE_CIPHER_SPEC) { if (SSL3_RECORD_get_type(rr) == SSL3_RT_CHANGE_CIPHER_SPEC) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_CCS_RECEIVED_EARLY);
SSL_R_CCS_RECEIVED_EARLY);
return -1; return -1;
} }
@ -1771,8 +1733,7 @@ int ssl3_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
* no progress is being made and the peer continually sends unrecognised * no progress is being made and the peer continually sends unrecognised
* record types, using up resources processing them. * record types, using up resources processing them.
*/ */
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_UNEXPECTED_RECORD);
SSL_R_UNEXPECTED_RECORD);
return -1; return -1;
case SSL3_RT_CHANGE_CIPHER_SPEC: case SSL3_RT_CHANGE_CIPHER_SPEC:
case SSL3_RT_ALERT: case SSL3_RT_ALERT:
@ -1782,8 +1743,7 @@ int ssl3_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
* SSL3_RT_HANDSHAKE when ossl_statem_get_in_handshake(s) is true, but * SSL3_RT_HANDSHAKE when ossl_statem_get_in_handshake(s) is true, but
* that should not happen when type != rr->type * that should not happen when type != rr->type
*/ */
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return -1; return -1;
case SSL3_RT_APPLICATION_DATA: case SSL3_RT_APPLICATION_DATA:
/* /*
@ -1814,8 +1774,7 @@ int ssl3_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf,
SSL3_RECORD_set_read(rr); SSL3_RECORD_set_read(rr);
goto start; goto start;
} else { } else {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_UNEXPECTED_RECORD);
SSL_R_UNEXPECTED_RECORD);
return -1; return -1;
} }
} }

View File

@ -66,8 +66,7 @@ int ssl3_setup_read_buffer(SSL *s)
* We assume we're so doomed that we won't even be able to send an * We assume we're so doomed that we won't even be able to send an
* alert. * alert.
*/ */
SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_SSL3_SETUP_READ_BUFFER, SSLfatal(s, SSL_AD_NO_ALERT, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
return 0; return 0;
} }
b->buf = p; b->buf = p;
@ -126,8 +125,7 @@ int ssl3_setup_write_buffer(SSL *s, size_t numwpipes, size_t len)
* buffers. We assume we're so doomed that we won't even be able * buffers. We assume we're so doomed that we won't even be able
* to send an alert. * to send an alert.
*/ */
SSLfatal(s, SSL_AD_NO_ALERT, SSLfatal(s, SSL_AD_NO_ALERT, ERR_R_MALLOC_FAILURE);
SSL_F_SSL3_SETUP_WRITE_BUFFER, ERR_R_MALLOC_FAILURE);
return 0; return 0;
} }
} else { } else {

View File

@ -115,8 +115,7 @@ int early_data_count_ok(SSL *s, size_t length, size_t overhead, int send)
if (!s->server && sess->ext.max_early_data == 0) { if (!s->server && sess->ext.max_early_data == 0) {
if (!ossl_assert(s->psksession != NULL if (!ossl_assert(s->psksession != NULL
&& s->psksession->ext.max_early_data > 0)) { && s->psksession->ext.max_early_data > 0)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_EARLY_DATA_COUNT_OK, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
sess = s->psksession; sess = s->psksession;
@ -132,7 +131,7 @@ int early_data_count_ok(SSL *s, size_t length, size_t overhead, int send)
if (max_early_data == 0) { if (max_early_data == 0) {
SSLfatal(s, send ? SSL_AD_INTERNAL_ERROR : SSL_AD_UNEXPECTED_MESSAGE, SSLfatal(s, send ? SSL_AD_INTERNAL_ERROR : SSL_AD_UNEXPECTED_MESSAGE,
SSL_F_EARLY_DATA_COUNT_OK, SSL_R_TOO_MUCH_EARLY_DATA); SSL_R_TOO_MUCH_EARLY_DATA);
return 0; return 0;
} }
@ -141,7 +140,7 @@ int early_data_count_ok(SSL *s, size_t length, size_t overhead, int send)
if (s->early_data_count + length > max_early_data) { if (s->early_data_count + length > max_early_data) {
SSLfatal(s, send ? SSL_AD_INTERNAL_ERROR : SSL_AD_UNEXPECTED_MESSAGE, SSLfatal(s, send ? SSL_AD_INTERNAL_ERROR : SSL_AD_UNEXPECTED_MESSAGE,
SSL_F_EARLY_DATA_COUNT_OK, SSL_R_TOO_MUCH_EARLY_DATA); SSL_R_TOO_MUCH_EARLY_DATA);
return 0; return 0;
} }
s->early_data_count += length; s->early_data_count += length;
@ -218,17 +217,14 @@ int ssl3_get_record(SSL *s)
switch (errno) { switch (errno) {
case EBADMSG: case EBADMSG:
SSLfatal(s, SSL_AD_BAD_RECORD_MAC, SSLfatal(s, SSL_AD_BAD_RECORD_MAC,
SSL_F_SSL3_GET_RECORD,
SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC); SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC);
break; break;
case EMSGSIZE: case EMSGSIZE:
SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSLfatal(s, SSL_AD_RECORD_OVERFLOW,
SSL_F_SSL3_GET_RECORD,
SSL_R_PACKET_LENGTH_TOO_LONG); SSL_R_PACKET_LENGTH_TOO_LONG);
break; break;
case EINVAL: case EINVAL:
SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSLfatal(s, SSL_AD_PROTOCOL_VERSION,
SSL_F_SSL3_GET_RECORD,
SSL_R_WRONG_VERSION_NUMBER); SSL_R_WRONG_VERSION_NUMBER);
break; break;
default: default:
@ -242,15 +238,13 @@ int ssl3_get_record(SSL *s)
p = RECORD_LAYER_get_packet(&s->rlayer); p = RECORD_LAYER_get_packet(&s->rlayer);
if (!PACKET_buf_init(&pkt, RECORD_LAYER_get_packet(&s->rlayer), if (!PACKET_buf_init(&pkt, RECORD_LAYER_get_packet(&s->rlayer),
RECORD_LAYER_get_packet_length(&s->rlayer))) { RECORD_LAYER_get_packet_length(&s->rlayer))) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return -1; return -1;
} }
sslv2pkt = pkt; sslv2pkt = pkt;
if (!PACKET_get_net_2_len(&sslv2pkt, &sslv2len) if (!PACKET_get_net_2_len(&sslv2pkt, &sslv2len)
|| !PACKET_get_1(&sslv2pkt, &type)) { || !PACKET_get_1(&sslv2pkt, &type)) {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_DECODE_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return -1; return -1;
} }
/* /*
@ -275,14 +269,13 @@ int ssl3_get_record(SSL *s)
if (thisrr->length > SSL3_BUFFER_get_len(rbuf) if (thisrr->length > SSL3_BUFFER_get_len(rbuf)
- SSL2_RT_HEADER_LENGTH) { - SSL2_RT_HEADER_LENGTH) {
SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_RECORD_OVERFLOW,
SSL_R_PACKET_LENGTH_TOO_LONG); SSL_R_PACKET_LENGTH_TOO_LONG);
return -1; return -1;
} }
if (thisrr->length < MIN_SSL2_RECORD_LEN) { if (thisrr->length < MIN_SSL2_RECORD_LEN) {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_TOO_SHORT);
SSL_R_LENGTH_TOO_SHORT);
return -1; return -1;
} }
} else { } else {
@ -295,8 +288,7 @@ int ssl3_get_record(SSL *s)
if (s->msg_callback) if (s->msg_callback)
s->msg_callback(0, 0, SSL3_RT_HEADER, p, 5, s, s->msg_callback(0, 0, SSL3_RT_HEADER, p, 5, s,
s->msg_callback_arg); s->msg_callback_arg);
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_DECODE_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return -1; return -1;
} }
thisrr->type = type; thisrr->type = type;
@ -327,7 +319,7 @@ int ssl3_get_record(SSL *s)
* shouldn't send a fatal alert back. We'll just * shouldn't send a fatal alert back. We'll just
* end. * end.
*/ */
SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_NO_ALERT,
SSL_R_WRONG_VERSION_NUMBER); SSL_R_WRONG_VERSION_NUMBER);
return -1; return -1;
} }
@ -336,7 +328,7 @@ int ssl3_get_record(SSL *s)
*/ */
s->version = (unsigned short)version; s->version = (unsigned short)version;
} }
SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_PROTOCOL_VERSION,
SSL_R_WRONG_VERSION_NUMBER); SSL_R_WRONG_VERSION_NUMBER);
return -1; return -1;
} }
@ -350,22 +342,20 @@ int ssl3_get_record(SSL *s)
strncmp((char *)p, "POST ", 5) == 0 || strncmp((char *)p, "POST ", 5) == 0 ||
strncmp((char *)p, "HEAD ", 5) == 0 || strncmp((char *)p, "HEAD ", 5) == 0 ||
strncmp((char *)p, "PUT ", 4) == 0) { strncmp((char *)p, "PUT ", 4) == 0) {
SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_NO_ALERT, SSL_R_HTTP_REQUEST);
SSL_R_HTTP_REQUEST);
return -1; return -1;
} else if (strncmp((char *)p, "CONNE", 5) == 0) { } else if (strncmp((char *)p, "CONNE", 5) == 0) {
SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_NO_ALERT,
SSL_R_HTTPS_PROXY_REQUEST); SSL_R_HTTPS_PROXY_REQUEST);
return -1; return -1;
} }
/* Doesn't look like TLS - don't send an alert */ /* Doesn't look like TLS - don't send an alert */
SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_NO_ALERT,
SSL_R_WRONG_VERSION_NUMBER); SSL_R_WRONG_VERSION_NUMBER);
return -1; return -1;
} else { } else {
SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSLfatal(s, SSL_AD_PROTOCOL_VERSION,
SSL_F_SSL3_GET_RECORD,
SSL_R_WRONG_VERSION_NUMBER); SSL_R_WRONG_VERSION_NUMBER);
return -1; return -1;
} }
@ -379,11 +369,11 @@ int ssl3_get_record(SSL *s)
|| s->statem.enc_read_state || s->statem.enc_read_state
!= ENC_READ_STATE_ALLOW_PLAIN_ALERTS)) { != ENC_READ_STATE_ALLOW_PLAIN_ALERTS)) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
SSL_F_SSL3_GET_RECORD, SSL_R_BAD_RECORD_TYPE); SSL_R_BAD_RECORD_TYPE);
return -1; return -1;
} }
if (thisrr->rec_version != TLS1_2_VERSION) { if (thisrr->rec_version != TLS1_2_VERSION) {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_DECODE_ERROR,
SSL_R_WRONG_VERSION_NUMBER); SSL_R_WRONG_VERSION_NUMBER);
return -1; return -1;
} }
@ -391,7 +381,7 @@ int ssl3_get_record(SSL *s)
if (thisrr->length > if (thisrr->length >
SSL3_BUFFER_get_len(rbuf) - SSL3_RT_HEADER_LENGTH) { SSL3_BUFFER_get_len(rbuf) - SSL3_RT_HEADER_LENGTH) {
SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_RECORD_OVERFLOW,
SSL_R_PACKET_LENGTH_TOO_LONG); SSL_R_PACKET_LENGTH_TOO_LONG);
return -1; return -1;
} }
@ -402,7 +392,7 @@ int ssl3_get_record(SSL *s)
if (SSL_IS_TLS13(s)) { if (SSL_IS_TLS13(s)) {
if (thisrr->length > SSL3_RT_MAX_TLS13_ENCRYPTED_LENGTH) { if (thisrr->length > SSL3_RT_MAX_TLS13_ENCRYPTED_LENGTH) {
SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_RECORD_OVERFLOW,
SSL_R_ENCRYPTED_LENGTH_TOO_LONG); SSL_R_ENCRYPTED_LENGTH_TOO_LONG);
return -1; return -1;
} }
@ -419,7 +409,7 @@ int ssl3_get_record(SSL *s)
#endif #endif
if (thisrr->length > len && !BIO_get_ktls_recv(s->rbio)) { if (thisrr->length > len && !BIO_get_ktls_recv(s->rbio)) {
SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_RECORD_OVERFLOW,
SSL_R_ENCRYPTED_LENGTH_TOO_LONG); SSL_R_ENCRYPTED_LENGTH_TOO_LONG);
return -1; return -1;
} }
@ -502,7 +492,7 @@ int ssl3_get_record(SSL *s)
* CCS messages must be exactly 1 byte long, containing the value 0x01 * CCS messages must be exactly 1 byte long, containing the value 0x01
*/ */
if (thisrr->length != 1 || thisrr->data[0] != 0x01) { if (thisrr->length != 1 || thisrr->data[0] != 0x01) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
SSL_R_INVALID_CCS_MESSAGE); SSL_R_INVALID_CCS_MESSAGE);
return -1; return -1;
} }
@ -514,7 +504,7 @@ int ssl3_get_record(SSL *s)
RECORD_LAYER_inc_empty_record_count(&s->rlayer); RECORD_LAYER_inc_empty_record_count(&s->rlayer);
if (RECORD_LAYER_get_empty_record_count(&s->rlayer) if (RECORD_LAYER_get_empty_record_count(&s->rlayer)
> MAX_EMPTY_RECORDS) { > MAX_EMPTY_RECORDS) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
SSL_R_UNEXPECTED_CCS_MESSAGE); SSL_R_UNEXPECTED_CCS_MESSAGE);
return -1; return -1;
} }
@ -538,8 +528,7 @@ int ssl3_get_record(SSL *s)
if (tmpmd != NULL) { if (tmpmd != NULL) {
imac_size = EVP_MD_size(tmpmd); imac_size = EVP_MD_size(tmpmd);
if (!ossl_assert(imac_size >= 0 && imac_size <= EVP_MAX_MD_SIZE)) { if (!ossl_assert(imac_size >= 0 && imac_size <= EVP_MAX_MD_SIZE)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_LIB_EVP);
ERR_LIB_EVP);
return -1; return -1;
} }
mac_size = (size_t)imac_size; mac_size = (size_t)imac_size;
@ -557,16 +546,15 @@ int ssl3_get_record(SSL *s)
thisrr = &rr[j]; thisrr = &rr[j];
if (thisrr->length < mac_size) { if (thisrr->length < mac_size) {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_TOO_SHORT);
SSL_R_LENGTH_TOO_SHORT);
return -1; return -1;
} }
thisrr->length -= mac_size; thisrr->length -= mac_size;
mac = thisrr->data + thisrr->length; mac = thisrr->data + thisrr->length;
i = s->method->ssl3_enc->mac(s, thisrr, md, 0 /* not send */ ); i = s->method->ssl3_enc->mac(s, thisrr, md, 0 /* not send */ );
if (i == 0 || CRYPTO_memcmp(md, mac, mac_size) != 0) { if (i == 0 || CRYPTO_memcmp(md, mac, mac_size) != 0) {
SSLfatal(s, SSL_AD_BAD_RECORD_MAC, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_BAD_RECORD_MAC,
SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC); SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC);
return -1; return -1;
} }
} }
@ -580,8 +568,7 @@ int ssl3_get_record(SSL *s)
if (mac_size > 0) { if (mac_size > 0) {
macbufs = OPENSSL_zalloc(sizeof(*macbufs) * num_recs); macbufs = OPENSSL_zalloc(sizeof(*macbufs) * num_recs);
if (macbufs == NULL) { if (macbufs == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
return -1; return -1;
} }
} }
@ -620,7 +607,7 @@ int ssl3_get_record(SSL *s)
ret = 1; ret = 1;
goto end; goto end;
} }
SSLfatal(s, SSL_AD_BAD_RECORD_MAC, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_BAD_RECORD_MAC,
SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC); SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC);
goto end; goto end;
} }
@ -660,7 +647,7 @@ int ssl3_get_record(SSL *s)
* not reveal which kind of error occurred -- this might become * not reveal which kind of error occurred -- this might become
* visible to an attacker (e.g. via a logfile) * visible to an attacker (e.g. via a logfile)
*/ */
SSLfatal(s, SSL_AD_BAD_RECORD_MAC, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_BAD_RECORD_MAC,
SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC); SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC);
goto end; goto end;
} }
@ -673,12 +660,12 @@ int ssl3_get_record(SSL *s)
/* thisrr->length is now just compressed */ /* thisrr->length is now just compressed */
if (s->expand != NULL) { if (s->expand != NULL) {
if (thisrr->length > SSL3_RT_MAX_COMPRESSED_LENGTH) { if (thisrr->length > SSL3_RT_MAX_COMPRESSED_LENGTH) {
SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_RECORD_OVERFLOW,
SSL_R_COMPRESSED_LENGTH_TOO_LONG); SSL_R_COMPRESSED_LENGTH_TOO_LONG);
goto end; goto end;
} }
if (!ssl3_do_uncompress(s, thisrr)) { if (!ssl3_do_uncompress(s, thisrr)) {
SSLfatal(s, SSL_AD_DECOMPRESSION_FAILURE, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_DECOMPRESSION_FAILURE,
SSL_R_BAD_DECOMPRESSION); SSL_R_BAD_DECOMPRESSION);
goto end; goto end;
} }
@ -691,8 +678,7 @@ int ssl3_get_record(SSL *s)
if (thisrr->length == 0 if (thisrr->length == 0
|| thisrr->type != SSL3_RT_APPLICATION_DATA) { || thisrr->type != SSL3_RT_APPLICATION_DATA) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_BAD_RECORD_TYPE);
SSL_R_BAD_RECORD_TYPE);
goto end; goto end;
} }
@ -706,8 +692,7 @@ int ssl3_get_record(SSL *s)
if (thisrr->type != SSL3_RT_APPLICATION_DATA if (thisrr->type != SSL3_RT_APPLICATION_DATA
&& thisrr->type != SSL3_RT_ALERT && thisrr->type != SSL3_RT_ALERT
&& thisrr->type != SSL3_RT_HANDSHAKE) { && thisrr->type != SSL3_RT_HANDSHAKE) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_BAD_RECORD_TYPE);
SSL_R_BAD_RECORD_TYPE);
goto end; goto end;
} }
if (s->msg_callback) if (s->msg_callback)
@ -723,14 +708,13 @@ int ssl3_get_record(SSL *s)
&& (thisrr->type == SSL3_RT_HANDSHAKE && (thisrr->type == SSL3_RT_HANDSHAKE
|| thisrr->type == SSL3_RT_ALERT) || thisrr->type == SSL3_RT_ALERT)
&& thisrr->length == 0) { && thisrr->length == 0) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_BAD_LENGTH);
SSL_R_BAD_LENGTH);
goto end; goto end;
} }
if (thisrr->length > SSL3_RT_MAX_PLAIN_LENGTH && !BIO_get_ktls_recv(s->rbio)) { if (thisrr->length > SSL3_RT_MAX_PLAIN_LENGTH
SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_F_SSL3_GET_RECORD, && !BIO_get_ktls_recv(s->rbio)) {
SSL_R_DATA_LENGTH_TOO_LONG); SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_R_DATA_LENGTH_TOO_LONG);
goto end; goto end;
} }
@ -738,8 +722,7 @@ int ssl3_get_record(SSL *s)
if (s->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(s->session) if (s->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(s->session)
&& thisrr->length > GET_MAX_FRAGMENT_LENGTH(s->session) && thisrr->length > GET_MAX_FRAGMENT_LENGTH(s->session)
&& !BIO_get_ktls_recv(s->rbio)) { && !BIO_get_ktls_recv(s->rbio)) {
SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_R_DATA_LENGTH_TOO_LONG);
SSL_R_DATA_LENGTH_TOO_LONG);
goto end; goto end;
} }
@ -757,8 +740,7 @@ int ssl3_get_record(SSL *s)
RECORD_LAYER_inc_empty_record_count(&s->rlayer); RECORD_LAYER_inc_empty_record_count(&s->rlayer);
if (RECORD_LAYER_get_empty_record_count(&s->rlayer) if (RECORD_LAYER_get_empty_record_count(&s->rlayer)
> MAX_EMPTY_RECORDS) { > MAX_EMPTY_RECORDS) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_RECORD_TOO_SMALL);
SSL_R_RECORD_TOO_SMALL);
goto end; goto end;
} }
} else { } else {
@ -929,8 +911,7 @@ int ssl3_enc(SSL *s, SSL3_RECORD *inrecs, size_t n_recs, int sending,
if (!EVP_CIPHER_CTX_get_params(ds, params)) { if (!EVP_CIPHER_CTX_get_params(ds, params)) {
/* Shouldn't normally happen */ /* Shouldn't normally happen */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, 0, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
} }
@ -938,7 +919,7 @@ int ssl3_enc(SSL *s, SSL3_RECORD *inrecs, size_t n_recs, int sending,
/* TODO(size_t): Convert this call */ /* TODO(size_t): Convert this call */
if (EVP_Cipher(ds, rec->data, rec->input, (unsigned int)l) < 1) { if (EVP_Cipher(ds, rec->data, rec->input, (unsigned int)l) < 1) {
/* Shouldn't happen */ /* Shouldn't happen */
SSLfatal(s, SSL_AD_BAD_RECORD_MAC, 0, ERR_R_INTERNAL_ERROR); SSLfatal(s, SSL_AD_BAD_RECORD_MAC, ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -981,8 +962,7 @@ int tls1_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
: (s->mac_flags & SSL_MAC_FLAG_READ_MAC_TLSTREE); : (s->mac_flags & SSL_MAC_FLAG_READ_MAC_TLSTREE);
if (n_recs == 0) { if (n_recs == 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -990,8 +970,7 @@ int tls1_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
if (EVP_MD_CTX_md(s->write_hash)) { if (EVP_MD_CTX_md(s->write_hash)) {
int n = EVP_MD_CTX_size(s->write_hash); int n = EVP_MD_CTX_size(s->write_hash);
if (!ossl_assert(n >= 0)) { if (!ossl_assert(n >= 0)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
} }
@ -1014,13 +993,11 @@ int tls1_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
* we can't write into the input stream: Can this ever * we can't write into the input stream: Can this ever
* happen?? (steve) * happen?? (steve)
*/ */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} else if (RAND_bytes_ex(s->ctx->libctx, recs[ctr].input, } else if (RAND_bytes_ex(s->ctx->libctx, recs[ctr].input,
ivlen) <= 0) { ivlen) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
} }
@ -1030,8 +1007,7 @@ int tls1_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
if (EVP_MD_CTX_md(s->read_hash)) { if (EVP_MD_CTX_md(s->read_hash)) {
int n = EVP_MD_CTX_size(s->read_hash); int n = EVP_MD_CTX_size(s->read_hash);
if (!ossl_assert(n >= 0)) { if (!ossl_assert(n >= 0)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
} }
@ -1059,8 +1035,7 @@ int tls1_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
* We shouldn't have been called with pipeline data if the * We shouldn't have been called with pipeline data if the
* cipher doesn't support pipelining * cipher doesn't support pipelining
*/ */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_PIPELINE_FAILURE);
SSL_R_PIPELINE_FAILURE);
return 0; return 0;
} }
} }
@ -1099,8 +1074,7 @@ int tls1_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
pad = EVP_CIPHER_CTX_ctrl(ds, EVP_CTRL_AEAD_TLS1_AAD, pad = EVP_CIPHER_CTX_ctrl(ds, EVP_CTRL_AEAD_TLS1_AAD,
EVP_AEAD_TLS1_AAD_LEN, buf[ctr]); EVP_AEAD_TLS1_AAD_LEN, buf[ctr]);
if (pad <= 0) { if (pad <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -1119,8 +1093,7 @@ int tls1_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
/* Add weird padding of up to 256 bytes */ /* Add weird padding of up to 256 bytes */
if (padnum > MAX_PADDING) { if (padnum > MAX_PADDING) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
/* we need to add 'padnum' padding bytes of value padval */ /* we need to add 'padnum' padding bytes of value padval */
@ -1147,8 +1120,7 @@ int tls1_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
} }
if (EVP_CIPHER_CTX_ctrl(ds, EVP_CTRL_SET_PIPELINE_OUTPUT_BUFS, if (EVP_CIPHER_CTX_ctrl(ds, EVP_CTRL_SET_PIPELINE_OUTPUT_BUFS,
(int)n_recs, data) <= 0) { (int)n_recs, data) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_PIPELINE_FAILURE);
SSL_R_PIPELINE_FAILURE);
return 0; return 0;
} }
/* Set the input buffers */ /* Set the input buffers */
@ -1159,8 +1131,7 @@ int tls1_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
(int)n_recs, data) <= 0 (int)n_recs, data) <= 0
|| EVP_CIPHER_CTX_ctrl(ds, EVP_CTRL_SET_PIPELINE_INPUT_LENS, || EVP_CIPHER_CTX_ctrl(ds, EVP_CTRL_SET_PIPELINE_INPUT_LENS,
(int)n_recs, reclen) <= 0) { (int)n_recs, reclen) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_PIPELINE_FAILURE);
SSL_R_PIPELINE_FAILURE);
return 0; return 0;
} }
} }
@ -1180,8 +1151,7 @@ int tls1_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
seq = sending ? RECORD_LAYER_get_write_sequence(&s->rlayer) seq = sending ? RECORD_LAYER_get_write_sequence(&s->rlayer)
: RECORD_LAYER_get_read_sequence(&s->rlayer); : RECORD_LAYER_get_read_sequence(&s->rlayer);
if (EVP_CIPHER_CTX_ctrl(ds, EVP_CTRL_TLSTREE, decrement_seq, seq) <= 0) { if (EVP_CIPHER_CTX_ctrl(ds, EVP_CTRL_TLSTREE, decrement_seq, seq) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
} }
@ -1191,8 +1161,7 @@ int tls1_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
/* Provided cipher - we do not support pipelining on this path */ /* Provided cipher - we do not support pipelining on this path */
if (n_recs > 1) { if (n_recs > 1) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -1233,7 +1202,7 @@ int tls1_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
if (!EVP_CIPHER_CTX_get_params(ds, params)) { if (!EVP_CIPHER_CTX_get_params(ds, params)) {
/* Shouldn't normally happen */ /* Shouldn't normally happen */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR,
ERR_R_INTERNAL_ERROR); ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -1568,8 +1537,7 @@ int dtls1_process_record(SSL *s, DTLS1_BITMAP *bitmap)
/* check is not needed I believe */ /* check is not needed I believe */
if (rr->length > SSL3_RT_MAX_ENCRYPTED_LENGTH) { if (rr->length > SSL3_RT_MAX_ENCRYPTED_LENGTH) {
SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_F_DTLS1_PROCESS_RECORD, SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_R_ENCRYPTED_LENGTH_TOO_LONG);
SSL_R_ENCRYPTED_LENGTH_TOO_LONG);
return 0; return 0;
} }
@ -1584,8 +1552,7 @@ int dtls1_process_record(SSL *s, DTLS1_BITMAP *bitmap)
if (tmpmd != NULL) { if (tmpmd != NULL) {
imac_size = EVP_MD_size(tmpmd); imac_size = EVP_MD_size(tmpmd);
if (!ossl_assert(imac_size >= 0 && imac_size <= EVP_MAX_MD_SIZE)) { if (!ossl_assert(imac_size >= 0 && imac_size <= EVP_MAX_MD_SIZE)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_GET_RECORD, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_LIB_EVP);
ERR_LIB_EVP);
return -1; return -1;
} }
mac_size = (size_t)imac_size; mac_size = (size_t)imac_size;
@ -1596,16 +1563,15 @@ int dtls1_process_record(SSL *s, DTLS1_BITMAP *bitmap)
unsigned char *mac; unsigned char *mac;
if (rr->orig_len < mac_size) { if (rr->orig_len < mac_size) {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_DTLS1_PROCESS_RECORD, SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_TOO_SHORT);
SSL_R_LENGTH_TOO_SHORT);
return 0; return 0;
} }
rr->length -= mac_size; rr->length -= mac_size;
mac = rr->data + rr->length; mac = rr->data + rr->length;
i = s->method->ssl3_enc->mac(s, rr, md, 0 /* not send */ ); i = s->method->ssl3_enc->mac(s, rr, md, 0 /* not send */ );
if (i == 0 || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0) { if (i == 0 || CRYPTO_memcmp(md, mac, (size_t)mac_size) != 0) {
SSLfatal(s, SSL_AD_BAD_RECORD_MAC, SSL_F_DTLS1_PROCESS_RECORD, SSLfatal(s, SSL_AD_BAD_RECORD_MAC,
SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC); SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC);
return 0; return 0;
} }
/* /*
@ -1669,13 +1635,12 @@ int dtls1_process_record(SSL *s, DTLS1_BITMAP *bitmap)
/* r->length is now just compressed */ /* r->length is now just compressed */
if (s->expand != NULL) { if (s->expand != NULL) {
if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH) { if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH) {
SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_F_DTLS1_PROCESS_RECORD, SSLfatal(s, SSL_AD_RECORD_OVERFLOW,
SSL_R_COMPRESSED_LENGTH_TOO_LONG); SSL_R_COMPRESSED_LENGTH_TOO_LONG);
goto end; goto end;
} }
if (!ssl3_do_uncompress(s, rr)) { if (!ssl3_do_uncompress(s, rr)) {
SSLfatal(s, SSL_AD_DECOMPRESSION_FAILURE, SSLfatal(s, SSL_AD_DECOMPRESSION_FAILURE, SSL_R_BAD_DECOMPRESSION);
SSL_F_DTLS1_PROCESS_RECORD, SSL_R_BAD_DECOMPRESSION);
goto end; goto end;
} }
} }
@ -1686,8 +1651,7 @@ int dtls1_process_record(SSL *s, DTLS1_BITMAP *bitmap)
/* send overflow if the plaintext is too long now it has passed MAC */ /* send overflow if the plaintext is too long now it has passed MAC */
if (rr->length > max_plain_length) { if (rr->length > max_plain_length) {
SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_F_DTLS1_PROCESS_RECORD, SSLfatal(s, SSL_AD_RECORD_OVERFLOW, SSL_R_DATA_LENGTH_TOO_LONG);
SSL_R_DATA_LENGTH_TOO_LONG);
goto end; goto end;
} }

View File

@ -36,8 +36,7 @@ int tls13_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
if (n_recs != 1) { if (n_recs != 1) {
/* Should not happen */ /* Should not happen */
/* TODO(TLS1.3): Support pipelining */ /* TODO(TLS1.3): Support pipelining */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -72,8 +71,7 @@ int tls13_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
} else { } else {
if (!ossl_assert(s->psksession != NULL if (!ossl_assert(s->psksession != NULL
&& s->psksession->ext.max_early_data > 0)) { && s->psksession->ext.max_early_data > 0)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
alg_enc = s->psksession->cipher->algorithm_enc; alg_enc = s->psksession->cipher->algorithm_enc;
@ -84,8 +82,7 @@ int tls13_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
* be NULL * be NULL
*/ */
if (!ossl_assert(s->s3.tmp.new_cipher != NULL)) { if (!ossl_assert(s->s3.tmp.new_cipher != NULL)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
alg_enc = s->s3.tmp.new_cipher->algorithm_enc; alg_enc = s->s3.tmp.new_cipher->algorithm_enc;
@ -98,8 +95,7 @@ int tls13_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
taglen = EVP_CCM_TLS_TAG_LEN; taglen = EVP_CCM_TLS_TAG_LEN;
if (sending && EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, if (sending && EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen,
NULL) <= 0) { NULL) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
} else if (alg_enc & SSL_AESGCM) { } else if (alg_enc & SSL_AESGCM) {
@ -107,8 +103,7 @@ int tls13_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
} else if (alg_enc & SSL_CHACHA20) { } else if (alg_enc & SSL_CHACHA20) {
taglen = EVP_CHACHAPOLY_TLS_TAG_LEN; taglen = EVP_CHACHAPOLY_TLS_TAG_LEN;
} else { } else {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -125,8 +120,7 @@ int tls13_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
/* Set up IV */ /* Set up IV */
if (ivlen < SEQ_NUM_SIZE) { if (ivlen < SEQ_NUM_SIZE) {
/* Should not happen */ /* Should not happen */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
offset = ivlen - SEQ_NUM_SIZE; offset = ivlen - SEQ_NUM_SIZE;
@ -150,8 +144,7 @@ int tls13_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
|| (!sending && EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, || (!sending && EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG,
taglen, taglen,
rec->data + rec->length) <= 0)) { rec->data + rec->length) <= 0)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -163,8 +156,7 @@ int tls13_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
|| !WPACKET_get_total_written(&wpkt, &hdrlen) || !WPACKET_get_total_written(&wpkt, &hdrlen)
|| hdrlen != SSL3_RT_HEADER_LENGTH || hdrlen != SSL3_RT_HEADER_LENGTH
|| !WPACKET_finish(&wpkt)) { || !WPACKET_finish(&wpkt)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
WPACKET_cleanup(&wpkt); WPACKET_cleanup(&wpkt);
return 0; return 0;
} }
@ -188,8 +180,7 @@ int tls13_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending,
/* Add the tag */ /* Add the tag */
if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen,
rec->data + rec->length) <= 0) { rec->data + rec->length) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_ENC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
rec->length += taglen; rec->length += taglen;

View File

@ -34,16 +34,14 @@ static int ssl3_generate_key_block(SSL *s, unsigned char *km, int num)
m5 = EVP_MD_CTX_new(); m5 = EVP_MD_CTX_new();
s1 = EVP_MD_CTX_new(); s1 = EVP_MD_CTX_new();
if (md5 == NULL || sha1 == NULL || m5 == NULL || s1 == NULL) { if (md5 == NULL || sha1 == NULL || m5 == NULL || s1 == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_GENERATE_KEY_BLOCK, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
for (i = 0; (int)i < num; i += MD5_DIGEST_LENGTH) { for (i = 0; (int)i < num; i += MD5_DIGEST_LENGTH) {
k++; k++;
if (k > sizeof(buf)) { if (k > sizeof(buf)) {
/* bug: 'buf' is too small for this ciphersuite */ /* bug: 'buf' is too small for this ciphersuite */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_GENERATE_KEY_BLOCK, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -60,21 +58,18 @@ static int ssl3_generate_key_block(SSL *s, unsigned char *km, int num)
|| !EVP_DigestUpdate(m5, s->session->master_key, || !EVP_DigestUpdate(m5, s->session->master_key,
s->session->master_key_length) s->session->master_key_length)
|| !EVP_DigestUpdate(m5, smd, SHA_DIGEST_LENGTH)) { || !EVP_DigestUpdate(m5, smd, SHA_DIGEST_LENGTH)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_GENERATE_KEY_BLOCK, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
if ((int)(i + MD5_DIGEST_LENGTH) > num) { if ((int)(i + MD5_DIGEST_LENGTH) > num) {
if (!EVP_DigestFinal_ex(m5, smd, NULL)) { if (!EVP_DigestFinal_ex(m5, smd, NULL)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_SSL3_GENERATE_KEY_BLOCK, ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
memcpy(km, smd, (num - i)); memcpy(km, smd, (num - i));
} else { } else {
if (!EVP_DigestFinal_ex(m5, km, NULL)) { if (!EVP_DigestFinal_ex(m5, km, NULL)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_SSL3_GENERATE_KEY_BLOCK, ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
} }
@ -109,8 +104,7 @@ int ssl3_change_cipher_state(SSL *s, int which)
m = s->s3.tmp.new_hash; m = s->s3.tmp.new_hash;
/* m == NULL will lead to a crash later */ /* m == NULL will lead to a crash later */
if (!ossl_assert(m != NULL)) { if (!ossl_assert(m != NULL)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
#ifndef OPENSSL_NO_COMP #ifndef OPENSSL_NO_COMP
@ -124,8 +118,7 @@ int ssl3_change_cipher_state(SSL *s, int which)
if (s->enc_read_ctx != NULL) { if (s->enc_read_ctx != NULL) {
reuse_dd = 1; reuse_dd = 1;
} else if ((s->enc_read_ctx = EVP_CIPHER_CTX_new()) == NULL) { } else if ((s->enc_read_ctx = EVP_CIPHER_CTX_new()) == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
goto err; goto err;
} else { } else {
/* /*
@ -136,8 +129,7 @@ int ssl3_change_cipher_state(SSL *s, int which)
dd = s->enc_read_ctx; dd = s->enc_read_ctx;
if (ssl_replace_hash(&s->read_hash, m) == NULL) { if (ssl_replace_hash(&s->read_hash, m) == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
#ifndef OPENSSL_NO_COMP #ifndef OPENSSL_NO_COMP
@ -148,7 +140,6 @@ int ssl3_change_cipher_state(SSL *s, int which)
s->expand = COMP_CTX_new(comp); s->expand = COMP_CTX_new(comp);
if (s->expand == NULL) { if (s->expand == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR,
SSL_F_SSL3_CHANGE_CIPHER_STATE,
SSL_R_COMPRESSION_LIBRARY_ERROR); SSL_R_COMPRESSION_LIBRARY_ERROR);
goto err; goto err;
} }
@ -161,8 +152,7 @@ int ssl3_change_cipher_state(SSL *s, int which)
if (s->enc_write_ctx != NULL) { if (s->enc_write_ctx != NULL) {
reuse_dd = 1; reuse_dd = 1;
} else if ((s->enc_write_ctx = EVP_CIPHER_CTX_new()) == NULL) { } else if ((s->enc_write_ctx = EVP_CIPHER_CTX_new()) == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
goto err; goto err;
} else { } else {
/* /*
@ -172,8 +162,7 @@ int ssl3_change_cipher_state(SSL *s, int which)
} }
dd = s->enc_write_ctx; dd = s->enc_write_ctx;
if (ssl_replace_hash(&s->write_hash, m) == NULL) { if (ssl_replace_hash(&s->write_hash, m) == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
#ifndef OPENSSL_NO_COMP #ifndef OPENSSL_NO_COMP
@ -184,7 +173,6 @@ int ssl3_change_cipher_state(SSL *s, int which)
s->compress = COMP_CTX_new(comp); s->compress = COMP_CTX_new(comp);
if (s->compress == NULL) { if (s->compress == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR,
SSL_F_SSL3_CHANGE_CIPHER_STATE,
SSL_R_COMPRESSION_LIBRARY_ERROR); SSL_R_COMPRESSION_LIBRARY_ERROR);
goto err; goto err;
} }
@ -200,8 +188,7 @@ int ssl3_change_cipher_state(SSL *s, int which)
p = s->s3.tmp.key_block; p = s->s3.tmp.key_block;
mdi = EVP_MD_size(m); mdi = EVP_MD_size(m);
if (mdi < 0) { if (mdi < 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
i = mdi; i = mdi;
@ -227,16 +214,14 @@ int ssl3_change_cipher_state(SSL *s, int which)
} }
if (n > s->s3.tmp.key_block_length) { if (n > s->s3.tmp.key_block_length) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
memcpy(mac_secret, ms, i); memcpy(mac_secret, ms, i);
if (!EVP_CipherInit_ex(dd, c, NULL, key, iv, (which & SSL3_CC_WRITE))) { if (!EVP_CipherInit_ex(dd, c, NULL, key, iv, (which & SSL3_CC_WRITE))) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -266,8 +251,7 @@ int ssl3_setup_key_block(SSL *s)
if (!ssl_cipher_get_evp(s->ctx, s->session, &c, &hash, NULL, NULL, &comp, if (!ssl_cipher_get_evp(s->ctx, s->session, &c, &hash, NULL, NULL, &comp,
0)) { 0)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_SETUP_KEY_BLOCK, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_CIPHER_OR_HASH_UNAVAILABLE);
SSL_R_CIPHER_OR_HASH_UNAVAILABLE);
return 0; return 0;
} }
@ -291,8 +275,7 @@ int ssl3_setup_key_block(SSL *s)
ssl3_cleanup_key_block(s); ssl3_cleanup_key_block(s);
if ((p = OPENSSL_malloc(num)) == NULL) { if ((p = OPENSSL_malloc(num)) == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_SETUP_KEY_BLOCK, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
return 0; return 0;
} }
@ -335,8 +318,7 @@ int ssl3_init_finished_mac(SSL *s)
BIO *buf = BIO_new(BIO_s_mem()); BIO *buf = BIO_new(BIO_s_mem());
if (buf == NULL) { if (buf == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_INIT_FINISHED_MAC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
return 0; return 0;
} }
ssl3_free_digest_list(s); ssl3_free_digest_list(s);
@ -365,21 +347,18 @@ int ssl3_finish_mac(SSL *s, const unsigned char *buf, size_t len)
if (s->s3.handshake_dgst == NULL) { if (s->s3.handshake_dgst == NULL) {
/* Note: this writes to a memory BIO so a failure is a fatal error */ /* Note: this writes to a memory BIO so a failure is a fatal error */
if (len > INT_MAX) { if (len > INT_MAX) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_FINISH_MAC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_OVERFLOW_ERROR);
SSL_R_OVERFLOW_ERROR);
return 0; return 0;
} }
ret = BIO_write(s->s3.handshake_buffer, (void *)buf, (int)len); ret = BIO_write(s->s3.handshake_buffer, (void *)buf, (int)len);
if (ret <= 0 || ret != (int)len) { if (ret <= 0 || ret != (int)len) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_FINISH_MAC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
} else { } else {
ret = EVP_DigestUpdate(s->s3.handshake_dgst, buf, len); ret = EVP_DigestUpdate(s->s3.handshake_dgst, buf, len);
if (!ret) { if (!ret) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_FINISH_MAC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
} }
@ -395,28 +374,25 @@ int ssl3_digest_cached_records(SSL *s, int keep)
if (s->s3.handshake_dgst == NULL) { if (s->s3.handshake_dgst == NULL) {
hdatalen = BIO_get_mem_data(s->s3.handshake_buffer, &hdata); hdatalen = BIO_get_mem_data(s->s3.handshake_buffer, &hdata);
if (hdatalen <= 0) { if (hdatalen <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_DIGEST_CACHED_RECORDS, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_BAD_HANDSHAKE_LENGTH);
SSL_R_BAD_HANDSHAKE_LENGTH);
return 0; return 0;
} }
s->s3.handshake_dgst = EVP_MD_CTX_new(); s->s3.handshake_dgst = EVP_MD_CTX_new();
if (s->s3.handshake_dgst == NULL) { if (s->s3.handshake_dgst == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_DIGEST_CACHED_RECORDS, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
return 0; return 0;
} }
md = ssl_handshake_md(s); md = ssl_handshake_md(s);
if (md == NULL) { if (md == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_DIGEST_CACHED_RECORDS, SSLfatal(s, SSL_AD_INTERNAL_ERROR,
SSL_R_NO_SUITABLE_DIGEST_ALGORITHM); SSL_R_NO_SUITABLE_DIGEST_ALGORITHM);
return 0; return 0;
} }
if (!EVP_DigestInit_ex(s->s3.handshake_dgst, md, NULL) if (!EVP_DigestInit_ex(s->s3.handshake_dgst, md, NULL)
|| !EVP_DigestUpdate(s->s3.handshake_dgst, hdata, hdatalen)) { || !EVP_DigestUpdate(s->s3.handshake_dgst, hdata, hdatalen)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_DIGEST_CACHED_RECORDS, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
} }
@ -450,28 +426,24 @@ size_t ssl3_final_finish_mac(SSL *s, const char *sender, size_t len,
} }
if (EVP_MD_CTX_type(s->s3.handshake_dgst) != NID_md5_sha1) { if (EVP_MD_CTX_type(s->s3.handshake_dgst) != NID_md5_sha1) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_FINAL_FINISH_MAC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_NO_REQUIRED_DIGEST);
SSL_R_NO_REQUIRED_DIGEST);
return 0; return 0;
} }
ctx = EVP_MD_CTX_new(); ctx = EVP_MD_CTX_new();
if (ctx == NULL) { if (ctx == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_FINAL_FINISH_MAC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
return 0; return 0;
} }
if (!EVP_MD_CTX_copy_ex(ctx, s->s3.handshake_dgst)) { if (!EVP_MD_CTX_copy_ex(ctx, s->s3.handshake_dgst)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_FINAL_FINISH_MAC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
ret = 0; ret = 0;
goto err; goto err;
} }
ret = EVP_MD_CTX_size(ctx); ret = EVP_MD_CTX_size(ctx);
if (ret < 0) { if (ret < 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_FINAL_FINISH_MAC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
ret = 0; ret = 0;
goto err; goto err;
} }
@ -484,8 +456,7 @@ size_t ssl3_final_finish_mac(SSL *s, const char *sender, size_t len,
if (EVP_DigestUpdate(ctx, sender, len) <= 0 if (EVP_DigestUpdate(ctx, sender, len) <= 0
|| EVP_MD_CTX_set_params(ctx, digest_cmd_params) <= 0 || EVP_MD_CTX_set_params(ctx, digest_cmd_params) <= 0
|| EVP_DigestFinal_ex(ctx, p, NULL) <= 0) { || EVP_DigestFinal_ex(ctx, p, NULL) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_FINAL_FINISH_MAC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
ret = 0; ret = 0;
} }
} }
@ -517,8 +488,7 @@ int ssl3_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p,
size_t ret_secret_size = 0; size_t ret_secret_size = 0;
if (ctx == NULL) { if (ctx == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_GENERATE_MASTER_SECRET, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
return 0; return 0;
} }
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
@ -536,8 +506,7 @@ int ssl3_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p,
|| EVP_DigestUpdate(ctx, p, len) <= 0 || EVP_DigestUpdate(ctx, p, len) <= 0
|| EVP_DigestUpdate(ctx, buf, n) <= 0 || EVP_DigestUpdate(ctx, buf, n) <= 0
|| EVP_DigestFinal_ex(ctx, out, &n) <= 0) { || EVP_DigestFinal_ex(ctx, out, &n) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_SSL3_GENERATE_MASTER_SECRET, ERR_R_INTERNAL_ERROR);
ret = 0; ret = 0;
break; break;
} }

View File

@ -4755,8 +4755,7 @@ EVP_PKEY *ssl_generate_pkey_group(SSL *s, uint16_t id)
EVP_PKEY *pkey = NULL; EVP_PKEY *pkey = NULL;
if (ginf == NULL) { if (ginf == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -4764,23 +4763,19 @@ EVP_PKEY *ssl_generate_pkey_group(SSL *s, uint16_t id)
s->ctx->propq); s->ctx->propq);
if (pctx == NULL) { if (pctx == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
if (EVP_PKEY_keygen_init(pctx) <= 0) { if (EVP_PKEY_keygen_init(pctx) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
ERR_R_EVP_LIB);
goto err; goto err;
} }
if (!EVP_PKEY_CTX_set_group_name(pctx, ginf->realname)) { if (!EVP_PKEY_CTX_set_group_name(pctx, ginf->realname)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
ERR_R_EVP_LIB);
goto err; goto err;
} }
if (EVP_PKEY_keygen(pctx, &pkey) <= 0) { if (EVP_PKEY_keygen(pctx, &pkey) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
ERR_R_EVP_LIB);
EVP_PKEY_free(pkey); EVP_PKEY_free(pkey);
pkey = NULL; pkey = NULL;
} }
@ -4810,8 +4805,7 @@ EVP_PKEY *ssl_generate_param_group(SSL *s, uint16_t id)
if (EVP_PKEY_paramgen_init(pctx) <= 0) if (EVP_PKEY_paramgen_init(pctx) <= 0)
goto err; goto err;
if (!EVP_PKEY_CTX_set_group_name(pctx, ginf->realname)) { if (!EVP_PKEY_CTX_set_group_name(pctx, ginf->realname)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
ERR_R_EVP_LIB);
goto err; goto err;
} }
if (EVP_PKEY_paramgen(pctx, &pkey) <= 0) { if (EVP_PKEY_paramgen(pctx, &pkey) <= 0) {
@ -4859,8 +4853,7 @@ int ssl_derive(SSL *s, EVP_PKEY *privkey, EVP_PKEY *pubkey, int gensecret)
EVP_PKEY_CTX *pctx; EVP_PKEY_CTX *pctx;
if (privkey == NULL || pubkey == NULL) { if (privkey == NULL || pubkey == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DERIVE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -4869,8 +4862,7 @@ int ssl_derive(SSL *s, EVP_PKEY *privkey, EVP_PKEY *pubkey, int gensecret)
if (EVP_PKEY_derive_init(pctx) <= 0 if (EVP_PKEY_derive_init(pctx) <= 0
|| EVP_PKEY_derive_set_peer(pctx, pubkey) <= 0 || EVP_PKEY_derive_set_peer(pctx, pubkey) <= 0
|| EVP_PKEY_derive(pctx, NULL, &pmslen) <= 0) { || EVP_PKEY_derive(pctx, NULL, &pmslen) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DERIVE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -4881,14 +4873,12 @@ int ssl_derive(SSL *s, EVP_PKEY *privkey, EVP_PKEY *pubkey, int gensecret)
pms = OPENSSL_malloc(pmslen); pms = OPENSSL_malloc(pmslen);
if (pms == NULL) { if (pms == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DERIVE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
if (EVP_PKEY_derive(pctx, pms, &pmslen) <= 0) { if (EVP_PKEY_derive(pctx, pms, &pmslen) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DERIVE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -4920,8 +4910,7 @@ int ssl_decapsulate(SSL *s, EVP_PKEY *privkey,
EVP_PKEY_CTX *pctx; EVP_PKEY_CTX *pctx;
if (privkey == NULL) { if (privkey == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DECAPSULATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -4929,21 +4918,18 @@ int ssl_decapsulate(SSL *s, EVP_PKEY *privkey,
if (EVP_PKEY_decapsulate_init(pctx) <= 0 if (EVP_PKEY_decapsulate_init(pctx) <= 0
|| EVP_PKEY_decapsulate(pctx, NULL, &pmslen, ct, ctlen) <= 0) { || EVP_PKEY_decapsulate(pctx, NULL, &pmslen, ct, ctlen) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DECAPSULATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
pms = OPENSSL_malloc(pmslen); pms = OPENSSL_malloc(pmslen);
if (pms == NULL) { if (pms == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DECAPSULATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
if (EVP_PKEY_decapsulate(pctx, pms, &pmslen, ct, ctlen) <= 0) { if (EVP_PKEY_decapsulate(pctx, pms, &pmslen, ct, ctlen) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DECAPSULATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -4974,8 +4960,7 @@ int ssl_encapsulate(SSL *s, EVP_PKEY *pubkey,
EVP_PKEY_CTX *pctx; EVP_PKEY_CTX *pctx;
if (pubkey == NULL) { if (pubkey == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ENCAPSULATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -4984,22 +4969,19 @@ int ssl_encapsulate(SSL *s, EVP_PKEY *pubkey,
if (EVP_PKEY_encapsulate_init(pctx) <= 0 if (EVP_PKEY_encapsulate_init(pctx) <= 0
|| EVP_PKEY_encapsulate(pctx, NULL, &ctlen, NULL, &pmslen) <= 0 || EVP_PKEY_encapsulate(pctx, NULL, &ctlen, NULL, &pmslen) <= 0
|| pmslen == 0 || ctlen == 0) { || pmslen == 0 || ctlen == 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ENCAPSULATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
pms = OPENSSL_malloc(pmslen); pms = OPENSSL_malloc(pmslen);
ct = OPENSSL_malloc(ctlen); ct = OPENSSL_malloc(ctlen);
if (pms == NULL || ct == NULL) { if (pms == NULL || ct == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ENCAPSULATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
if (EVP_PKEY_encapsulate(pctx, ct, &ctlen, pms, &pmslen) <= 0) { if (EVP_PKEY_encapsulate(pctx, ct, &ctlen, pms, &pmslen) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ENCAPSULATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }

View File

@ -902,10 +902,9 @@ int ssl_build_cert_chain(SSL *s, SSL_CTX *ctx, int flags)
if (i > 0) if (i > 0)
chain = X509_STORE_CTX_get1_chain(xs_ctx); chain = X509_STORE_CTX_get1_chain(xs_ctx);
if (i <= 0) { if (i <= 0) {
ERR_raise(ERR_LIB_SSL, SSL_R_CERTIFICATE_VERIFY_FAILED);
i = X509_STORE_CTX_get_error(xs_ctx); i = X509_STORE_CTX_get_error(xs_ctx);
ERR_add_error_data(2, "Verify error:", ERR_raise_data(ERR_LIB_SSL, SSL_R_CERTIFICATE_VERIFY_FAILED,
X509_verify_cert_error_string(i)); "Verify error:%s", X509_verify_cert_error_string(i));
goto err; goto err;
} }

View File

@ -872,17 +872,14 @@ int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value)
return 2; return 2;
if (rv == -2) if (rv == -2)
return -2; return -2;
if (cctx->flags & SSL_CONF_FLAG_SHOW_ERRORS) { if (cctx->flags & SSL_CONF_FLAG_SHOW_ERRORS)
ERR_raise(ERR_LIB_SSL, SSL_R_BAD_VALUE); ERR_raise_data(ERR_LIB_SSL, SSL_R_BAD_VALUE,
ERR_add_error_data(4, "cmd=", cmd, ", value=", value); "cmd=%s, value=%s", cmd, value);
}
return 0; return 0;
} }
if (cctx->flags & SSL_CONF_FLAG_SHOW_ERRORS) { if (cctx->flags & SSL_CONF_FLAG_SHOW_ERRORS)
ERR_raise(ERR_LIB_SSL, SSL_R_UNKNOWN_CMD_NAME); ERR_raise_data(ERR_LIB_SSL, SSL_R_UNKNOWN_CMD_NAME, "cmd=%s", cmd);
ERR_add_error_data(2, "cmd=", cmd);
}
return -2; return -2;
} }

View File

@ -4753,8 +4753,7 @@ int ssl_handshake_hash(SSL *s, unsigned char *out, size_t outlen,
int ret = 0; int ret = 0;
if (hashleni < 0 || (size_t)hashleni > outlen) { if (hashleni < 0 || (size_t)hashleni > outlen) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_HANDSHAKE_HASH, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -4764,8 +4763,7 @@ int ssl_handshake_hash(SSL *s, unsigned char *out, size_t outlen,
if (!EVP_MD_CTX_copy_ex(ctx, hdgst) if (!EVP_MD_CTX_copy_ex(ctx, hdgst)
|| EVP_DigestFinal_ex(ctx, out, NULL) <= 0) { || EVP_DigestFinal_ex(ctx, out, NULL) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_HANDSHAKE_HASH, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -5185,8 +5183,7 @@ int ssl_validate_ct(SSL *s)
ctx = CT_POLICY_EVAL_CTX_new_ex(s->ctx->libctx, s->ctx->propq); ctx = CT_POLICY_EVAL_CTX_new_ex(s->ctx->libctx, s->ctx->propq);
if (ctx == NULL) { if (ctx == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_VALIDATE_CT, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
goto end; goto end;
} }
@ -5214,8 +5211,7 @@ int ssl_validate_ct(SSL *s)
* ought to correspond to an inability to carry out its duties. * ought to correspond to an inability to carry out its duties.
*/ */
if (SCT_LIST_validate(scts, ctx) < 0) { if (SCT_LIST_validate(scts, ctx) < 0) {
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_SSL_VALIDATE_CT, SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_SCT_VERIFICATION_FAILED);
SSL_R_SCT_VERIFICATION_FAILED);
goto end; goto end;
} }
@ -5223,8 +5219,7 @@ int ssl_validate_ct(SSL *s)
if (ret < 0) if (ret < 0)
ret = 0; /* This function returns 0 on failure */ ret = 0; /* This function returns 0 on failure */
if (!ret) if (!ret)
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_SSL_VALIDATE_CT, SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_CALLBACK_FAILED);
SSL_R_CALLBACK_FAILED);
end: end:
CT_POLICY_EVAL_CTX_free(ctx); CT_POLICY_EVAL_CTX_free(ctx);
@ -5466,8 +5461,7 @@ static int nss_keylog_int(const char *prefix,
prefix_len = strlen(prefix); prefix_len = strlen(prefix);
out_len = prefix_len + (2 * parameter_1_len) + (2 * parameter_2_len) + 3; out_len = prefix_len + (2 * parameter_1_len) + (2 * parameter_2_len) + 3;
if ((out = cursor = OPENSSL_malloc(out_len)) == NULL) { if ((out = cursor = OPENSSL_malloc(out_len)) == NULL) {
SSLfatal(ssl, SSL_AD_INTERNAL_ERROR, SSL_F_NSS_KEYLOG_INT, SSLfatal(ssl, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
return 0; return 0;
} }
@ -5500,8 +5494,7 @@ int ssl_log_rsa_client_key_exchange(SSL *ssl,
size_t premaster_len) size_t premaster_len)
{ {
if (encrypted_premaster_len < 8) { if (encrypted_premaster_len < 8) {
SSLfatal(ssl, SSL_AD_INTERNAL_ERROR, SSLfatal(ssl, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -5536,14 +5529,12 @@ int ssl_cache_cipherlist(SSL *s, PACKET *cipher_suites, int sslv2format)
n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN; n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN;
if (PACKET_remaining(cipher_suites) == 0) { if (PACKET_remaining(cipher_suites) == 0) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_SSL_CACHE_CIPHERLIST, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_NO_CIPHERS_SPECIFIED);
SSL_R_NO_CIPHERS_SPECIFIED);
return 0; return 0;
} }
if (PACKET_remaining(cipher_suites) % n != 0) { if (PACKET_remaining(cipher_suites) % n != 0) {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL_CACHE_CIPHERLIST, SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
return 0; return 0;
} }
@ -5567,8 +5558,7 @@ int ssl_cache_cipherlist(SSL *s, PACKET *cipher_suites, int sslv2format)
raw = OPENSSL_malloc(numciphers * TLS_CIPHER_LEN); raw = OPENSSL_malloc(numciphers * TLS_CIPHER_LEN);
s->s3.tmp.ciphers_raw = raw; s->s3.tmp.ciphers_raw = raw;
if (raw == NULL) { if (raw == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_CACHE_CIPHERLIST, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
return 0; return 0;
} }
for (s->s3.tmp.ciphers_rawlen = 0; for (s->s3.tmp.ciphers_rawlen = 0;
@ -5580,8 +5570,7 @@ int ssl_cache_cipherlist(SSL *s, PACKET *cipher_suites, int sslv2format)
TLS_CIPHER_LEN)) TLS_CIPHER_LEN))
|| (leadbyte != 0 || (leadbyte != 0
&& !PACKET_forward(&sslv2ciphers, TLS_CIPHER_LEN))) { && !PACKET_forward(&sslv2ciphers, TLS_CIPHER_LEN))) {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL_CACHE_CIPHERLIST, SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_PACKET);
SSL_R_BAD_PACKET);
OPENSSL_free(s->s3.tmp.ciphers_raw); OPENSSL_free(s->s3.tmp.ciphers_raw);
s->s3.tmp.ciphers_raw = NULL; s->s3.tmp.ciphers_raw = NULL;
s->s3.tmp.ciphers_rawlen = 0; s->s3.tmp.ciphers_rawlen = 0;
@ -5592,8 +5581,7 @@ int ssl_cache_cipherlist(SSL *s, PACKET *cipher_suites, int sslv2format)
} }
} else if (!PACKET_memdup(cipher_suites, &s->s3.tmp.ciphers_raw, } else if (!PACKET_memdup(cipher_suites, &s->s3.tmp.ciphers_raw,
&s->s3.tmp.ciphers_rawlen)) { &s->s3.tmp.ciphers_rawlen)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_CACHE_CIPHERLIST, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
return 1; return 1;
@ -5626,8 +5614,7 @@ int bytes_to_cipher_list(SSL *s, PACKET *cipher_suites,
if (PACKET_remaining(cipher_suites) == 0) { if (PACKET_remaining(cipher_suites) == 0) {
if (fatal) if (fatal)
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_BYTES_TO_CIPHER_LIST, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_NO_CIPHERS_SPECIFIED);
SSL_R_NO_CIPHERS_SPECIFIED);
else else
ERR_raise(ERR_LIB_SSL, SSL_R_NO_CIPHERS_SPECIFIED); ERR_raise(ERR_LIB_SSL, SSL_R_NO_CIPHERS_SPECIFIED);
return 0; return 0;
@ -5635,7 +5622,7 @@ int bytes_to_cipher_list(SSL *s, PACKET *cipher_suites,
if (PACKET_remaining(cipher_suites) % n != 0) { if (PACKET_remaining(cipher_suites) % n != 0) {
if (fatal) if (fatal)
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_BYTES_TO_CIPHER_LIST, SSLfatal(s, SSL_AD_DECODE_ERROR,
SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST); SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
else else
ERR_raise(ERR_LIB_SSL, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST); ERR_raise(ERR_LIB_SSL, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
@ -5646,8 +5633,7 @@ int bytes_to_cipher_list(SSL *s, PACKET *cipher_suites,
scsvs = sk_SSL_CIPHER_new_null(); scsvs = sk_SSL_CIPHER_new_null();
if (sk == NULL || scsvs == NULL) { if (sk == NULL || scsvs == NULL) {
if (fatal) if (fatal)
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_BYTES_TO_CIPHER_LIST, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
else else
ERR_raise(ERR_LIB_SSL, ERR_R_MALLOC_FAILURE); ERR_raise(ERR_LIB_SSL, ERR_R_MALLOC_FAILURE);
goto err; goto err;
@ -5668,8 +5654,7 @@ int bytes_to_cipher_list(SSL *s, PACKET *cipher_suites,
if ((c->valid && !sk_SSL_CIPHER_push(sk, c)) || if ((c->valid && !sk_SSL_CIPHER_push(sk, c)) ||
(!c->valid && !sk_SSL_CIPHER_push(scsvs, c))) { (!c->valid && !sk_SSL_CIPHER_push(scsvs, c))) {
if (fatal) if (fatal)
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
SSL_F_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
else else
ERR_raise(ERR_LIB_SSL, ERR_R_MALLOC_FAILURE); ERR_raise(ERR_LIB_SSL, ERR_R_MALLOC_FAILURE);
goto err; goto err;
@ -5678,8 +5663,7 @@ int bytes_to_cipher_list(SSL *s, PACKET *cipher_suites,
} }
if (PACKET_remaining(cipher_suites) > 0) { if (PACKET_remaining(cipher_suites) > 0) {
if (fatal) if (fatal)
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_BYTES_TO_CIPHER_LIST, SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_LENGTH);
SSL_R_BAD_LENGTH);
else else
ERR_raise(ERR_LIB_SSL, SSL_R_BAD_LENGTH); ERR_raise(ERR_LIB_SSL, SSL_R_BAD_LENGTH);
goto err; goto err;

View File

@ -39,10 +39,9 @@ static int ssl_do_config(SSL *s, SSL_CTX *ctx, const char *name, int system)
if (name == NULL && system) if (name == NULL && system)
name = "system_default"; name = "system_default";
if (!conf_ssl_name_find(name, &idx)) { if (!conf_ssl_name_find(name, &idx)) {
if (!system) { if (!system)
ERR_raise(ERR_LIB_SSL, SSL_R_INVALID_CONFIGURATION_NAME); ERR_raise_data(ERR_LIB_SSL, SSL_R_INVALID_CONFIGURATION_NAME,
ERR_add_error_data(2, "name=", name); "name=%s", name);
}
goto err; goto err;
} }
cmds = conf_ssl_get(idx, &name, &cmd_count); cmds = conf_ssl_get(idx, &name, &cmd_count);
@ -73,12 +72,10 @@ static int ssl_do_config(SSL *s, SSL_CTX *ctx, const char *name, int system)
conf_ssl_get_cmd(cmds, i, &cmdstr, &arg); conf_ssl_get_cmd(cmds, i, &cmdstr, &arg);
rv = SSL_CONF_cmd(cctx, cmdstr, arg); rv = SSL_CONF_cmd(cctx, cmdstr, arg);
if (rv <= 0) { if (rv <= 0) {
if (rv == -2) int errcode = rv == -2 ? SSL_R_UNKNOWN_COMMAND : SSL_R_BAD_VALUE;
ERR_raise(ERR_LIB_SSL, SSL_R_UNKNOWN_COMMAND);
else ERR_raise_data(ERR_LIB_SSL, errcode,
ERR_raise(ERR_LIB_SSL, SSL_R_BAD_VALUE); "section=%s, cmd=%s, arg=%s", name, cmdstr, arg);
ERR_add_error_data(6, "section=", name, ", cmd=", cmdstr,
", arg=", arg);
goto err; goto err;
} }
} }

View File

@ -294,8 +294,7 @@ int ssl_generate_session_id(SSL *s, SSL_SESSION *ss)
ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH;
break; break;
default: default:
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_SESSION_ID, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_UNSUPPORTED_SSL_VERSION);
SSL_R_UNSUPPORTED_SSL_VERSION);
return 0; return 0;
} }
@ -333,7 +332,7 @@ int ssl_generate_session_id(SSL *s, SSL_SESSION *ss)
tmp = (int)ss->session_id_length; tmp = (int)ss->session_id_length;
if (!cb(s, ss->session_id, &tmp)) { if (!cb(s, ss->session_id, &tmp)) {
/* The callback failed */ /* The callback failed */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_SESSION_ID, SSLfatal(s, SSL_AD_INTERNAL_ERROR,
SSL_R_SSL_SESSION_ID_CALLBACK_FAILED); SSL_R_SSL_SESSION_ID_CALLBACK_FAILED);
return 0; return 0;
} }
@ -343,7 +342,7 @@ int ssl_generate_session_id(SSL *s, SSL_SESSION *ss)
*/ */
if (tmp == 0 || tmp > ss->session_id_length) { if (tmp == 0 || tmp > ss->session_id_length) {
/* The callback set an illegal length */ /* The callback set an illegal length */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_SESSION_ID, SSLfatal(s, SSL_AD_INTERNAL_ERROR,
SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH); SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH);
return 0; return 0;
} }
@ -351,8 +350,7 @@ int ssl_generate_session_id(SSL *s, SSL_SESSION *ss)
/* Finally, check for a conflict */ /* Finally, check for a conflict */
if (SSL_has_matching_session_id(s, ss->session_id, if (SSL_has_matching_session_id(s, ss->session_id,
(unsigned int)ss->session_id_length)) { (unsigned int)ss->session_id_length)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_SESSION_ID, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_SSL_SESSION_ID_CONFLICT);
SSL_R_SSL_SESSION_ID_CONFLICT);
return 0; return 0;
} }
@ -366,8 +364,7 @@ int ssl_get_new_session(SSL *s, int session)
SSL_SESSION *ss = NULL; SSL_SESSION *ss = NULL;
if ((ss = SSL_SESSION_new()) == NULL) { if ((ss = SSL_SESSION_new()) == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GET_NEW_SESSION, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
return 0; return 0;
} }
@ -398,8 +395,7 @@ int ssl_get_new_session(SSL *s, int session)
} }
if (s->sid_ctx_length > sizeof(ss->sid_ctx)) { if (s->sid_ctx_length > sizeof(ss->sid_ctx)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GET_NEW_SESSION, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
SSL_SESSION_free(ss); SSL_SESSION_free(ss);
return 0; return 0;
} }
@ -527,8 +523,7 @@ int ssl_get_prev_session(SSL *s, CLIENTHELLO_MSG *hello)
case SSL_TICKET_FATAL_ERR_MALLOC: case SSL_TICKET_FATAL_ERR_MALLOC:
case SSL_TICKET_FATAL_ERR_OTHER: case SSL_TICKET_FATAL_ERR_OTHER:
fatal = 1; fatal = 1;
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GET_PREV_SESSION, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
case SSL_TICKET_NONE: case SSL_TICKET_NONE:
case SSL_TICKET_EMPTY: case SSL_TICKET_EMPTY:
@ -574,7 +569,7 @@ int ssl_get_prev_session(SSL *s, CLIENTHELLO_MSG *hello)
* noticing). * noticing).
*/ */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GET_PREV_SESSION, SSLfatal(s, SSL_AD_INTERNAL_ERROR,
SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED); SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED);
fatal = 1; fatal = 1;
goto err; goto err;
@ -593,8 +588,7 @@ int ssl_get_prev_session(SSL *s, CLIENTHELLO_MSG *hello)
if (ret->flags & SSL_SESS_FLAG_EXTMS) { if (ret->flags & SSL_SESS_FLAG_EXTMS) {
/* If old session includes extms, but new does not: abort handshake */ /* If old session includes extms, but new does not: abort handshake */
if (!(s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS)) { if (!(s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS)) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_SSL_GET_PREV_SESSION, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_INCONSISTENT_EXTMS);
SSL_R_INCONSISTENT_EXTMS);
fatal = 1; fatal = 1;
goto err; goto err;
} }

View File

@ -571,8 +571,7 @@ int tls_collect_extensions(SSL *s, PACKET *packet, unsigned int context,
num_exts = OSSL_NELEM(ext_defs) + (exts != NULL ? exts->meths_count : 0); num_exts = OSSL_NELEM(ext_defs) + (exts != NULL ? exts->meths_count : 0);
raw_extensions = OPENSSL_zalloc(num_exts * sizeof(*raw_extensions)); raw_extensions = OPENSSL_zalloc(num_exts * sizeof(*raw_extensions));
if (raw_extensions == NULL) { if (raw_extensions == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_COLLECT_EXTENSIONS, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
return 0; return 0;
} }
@ -584,8 +583,7 @@ int tls_collect_extensions(SSL *s, PACKET *packet, unsigned int context,
if (!PACKET_get_net_2(&extensions, &type) || if (!PACKET_get_net_2(&extensions, &type) ||
!PACKET_get_length_prefixed_2(&extensions, &extension)) { !PACKET_get_length_prefixed_2(&extensions, &extension)) {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_COLLECT_EXTENSIONS, SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
SSL_R_BAD_EXTENSION);
goto err; goto err;
} }
/* /*
@ -598,8 +596,7 @@ int tls_collect_extensions(SSL *s, PACKET *packet, unsigned int context,
|| (type == TLSEXT_TYPE_psk || (type == TLSEXT_TYPE_psk
&& (context & SSL_EXT_CLIENT_HELLO) != 0 && (context & SSL_EXT_CLIENT_HELLO) != 0
&& PACKET_remaining(&extensions) != 0)) { && PACKET_remaining(&extensions) != 0)) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_COLLECT_EXTENSIONS, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_EXTENSION);
SSL_R_BAD_EXTENSION);
goto err; goto err;
} }
idx = thisex - raw_extensions; idx = thisex - raw_extensions;
@ -631,7 +628,7 @@ int tls_collect_extensions(SSL *s, PACKET *packet, unsigned int context,
#endif #endif
) { ) {
SSLfatal(s, SSL_AD_UNSUPPORTED_EXTENSION, SSLfatal(s, SSL_AD_UNSUPPORTED_EXTENSION,
SSL_F_TLS_COLLECT_EXTENSIONS, SSL_R_UNSOLICITED_EXTENSION); SSL_R_UNSOLICITED_EXTENSION);
goto err; goto err;
} }
if (thisex != NULL) { if (thisex != NULL) {
@ -810,16 +807,14 @@ int tls_construct_extensions(SSL *s, WPACKET *pkt, unsigned int context,
(SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_SERVER_HELLO)) != 0 (SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_SERVER_HELLO)) != 0
&& !WPACKET_set_flags(pkt, && !WPACKET_set_flags(pkt,
WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH))) { WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH))) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_EXTENSIONS, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
if ((context & SSL_EXT_CLIENT_HELLO) != 0) { if ((context & SSL_EXT_CLIENT_HELLO) != 0) {
reason = ssl_get_min_max_version(s, &min_version, &max_version, NULL); reason = ssl_get_min_max_version(s, &min_version, &max_version, NULL);
if (reason != 0) { if (reason != 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_EXTENSIONS, SSLfatal(s, SSL_AD_INTERNAL_ERROR, reason);
reason);
return 0; return 0;
} }
} }
@ -862,8 +857,7 @@ int tls_construct_extensions(SSL *s, WPACKET *pkt, unsigned int context,
} }
if (!WPACKET_close(pkt)) { if (!WPACKET_close(pkt)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_EXTENSIONS, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -887,7 +881,7 @@ static int final_renegotiate(SSL *s, unsigned int context, int sent)
if (!(s->options & SSL_OP_LEGACY_SERVER_CONNECT) if (!(s->options & SSL_OP_LEGACY_SERVER_CONNECT)
&& !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION) && !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)
&& !sent) { && !sent) {
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_FINAL_RENEGOTIATE, SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED); SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
return 0; return 0;
} }
@ -899,7 +893,7 @@ static int final_renegotiate(SSL *s, unsigned int context, int sent)
if (s->renegotiate if (s->renegotiate
&& !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION) && !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)
&& !sent) { && !sent) {
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_FINAL_RENEGOTIATE, SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED); SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
return 0; return 0;
} }
@ -927,8 +921,7 @@ static int final_server_name(SSL *s, unsigned int context, int sent)
int was_ticket = (SSL_get_options(s) & SSL_OP_NO_TICKET) == 0; int was_ticket = (SSL_get_options(s) & SSL_OP_NO_TICKET) == 0;
if (!ossl_assert(s->ctx != NULL) || !ossl_assert(s->session_ctx != NULL)) { if (!ossl_assert(s->ctx != NULL) || !ossl_assert(s->session_ctx != NULL)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_FINAL_SERVER_NAME, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -953,8 +946,7 @@ static int final_server_name(SSL *s, unsigned int context, int sent)
OPENSSL_free(s->session->ext.hostname); OPENSSL_free(s->session->ext.hostname);
s->session->ext.hostname = OPENSSL_strdup(s->ext.hostname); s->session->ext.hostname = OPENSSL_strdup(s->ext.hostname);
if (s->session->ext.hostname == NULL && s->ext.hostname != NULL) { if (s->session->ext.hostname == NULL && s->ext.hostname != NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_FINAL_SERVER_NAME, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
} }
} }
} }
@ -988,13 +980,11 @@ static int final_server_name(SSL *s, unsigned int context, int sent)
ss->ext.tick_lifetime_hint = 0; ss->ext.tick_lifetime_hint = 0;
ss->ext.tick_age_add = 0; ss->ext.tick_age_add = 0;
if (!ssl_generate_session_id(s, ss)) { if (!ssl_generate_session_id(s, ss)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_FINAL_SERVER_NAME, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
} else { } else {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_FINAL_SERVER_NAME, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
} }
@ -1002,7 +992,7 @@ static int final_server_name(SSL *s, unsigned int context, int sent)
switch (ret) { switch (ret) {
case SSL_TLSEXT_ERR_ALERT_FATAL: case SSL_TLSEXT_ERR_ALERT_FATAL:
SSLfatal(s, altmp, SSL_F_FINAL_SERVER_NAME, SSL_R_CALLBACK_FAILED); SSLfatal(s, altmp, SSL_R_CALLBACK_FAILED);
return 0; return 0;
case SSL_TLSEXT_ERR_ALERT_WARNING: case SSL_TLSEXT_ERR_ALERT_WARNING:
@ -1051,7 +1041,7 @@ static int final_ec_pt_formats(SSL *s, unsigned int context, int sent)
break; break;
} }
if (i == s->ext.peer_ecpointformats_len) { if (i == s->ext.peer_ecpointformats_len) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_FINAL_EC_PT_FORMATS, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST); SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST);
return 0; return 0;
} }
@ -1183,8 +1173,7 @@ static int final_ems(SSL *s, unsigned int context, int sent)
*/ */
if (!(s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS) if (!(s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS)
&& (s->s3.flags & TLS1_FLAGS_REQUIRED_EXTMS)) { && (s->s3.flags & TLS1_FLAGS_REQUIRED_EXTMS)) {
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_FINAL_EMS, SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_INCONSISTENT_EXTMS);
SSL_R_INCONSISTENT_EXTMS);
return 0; return 0;
} }
if (!s->server && s->hit) { if (!s->server && s->hit) {
@ -1194,8 +1183,7 @@ static int final_ems(SSL *s, unsigned int context, int sent)
*/ */
if (!(s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS) != if (!(s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS) !=
!(s->session->flags & SSL_SESS_FLAG_EXTMS)) { !(s->session->flags & SSL_SESS_FLAG_EXTMS)) {
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_FINAL_EMS, SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_INCONSISTENT_EXTMS);
SSL_R_INCONSISTENT_EXTMS);
return 0; return 0;
} }
} }
@ -1222,9 +1210,7 @@ static EXT_RETURN tls_construct_certificate_authorities(SSL *s, WPACKET *pkt,
if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_certificate_authorities) if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_certificate_authorities)
|| !WPACKET_start_sub_packet_u16(pkt)) { || !WPACKET_start_sub_packet_u16(pkt)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES,
ERR_R_INTERNAL_ERROR);
return EXT_RETURN_FAIL; return EXT_RETURN_FAIL;
} }
@ -1234,9 +1220,7 @@ static EXT_RETURN tls_construct_certificate_authorities(SSL *s, WPACKET *pkt,
} }
if (!WPACKET_close(pkt)) { if (!WPACKET_close(pkt)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES,
ERR_R_INTERNAL_ERROR);
return EXT_RETURN_FAIL; return EXT_RETURN_FAIL;
} }
@ -1250,8 +1234,7 @@ static int tls_parse_certificate_authorities(SSL *s, PACKET *pkt,
if (!parse_ca_names(s, pkt)) if (!parse_ca_names(s, pkt))
return 0; return 0;
if (PACKET_remaining(pkt) != 0) { if (PACKET_remaining(pkt) != 0) {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_EXTENSION);
SSL_F_TLS_PARSE_CERTIFICATE_AUTHORITIES, SSL_R_BAD_EXTENSION);
return 0; return 0;
} }
return 1; return 1;
@ -1270,7 +1253,7 @@ static int init_srtp(SSL *s, unsigned int context)
static int final_sig_algs(SSL *s, unsigned int context, int sent) static int final_sig_algs(SSL *s, unsigned int context, int sent)
{ {
if (!sent && SSL_IS_TLS13(s) && !s->hit) { if (!sent && SSL_IS_TLS13(s) && !s->hit) {
SSLfatal(s, TLS13_AD_MISSING_EXTENSION, SSL_F_FINAL_SIG_ALGS, SSLfatal(s, TLS13_AD_MISSING_EXTENSION,
SSL_R_MISSING_SIGALGS_EXTENSION); SSL_R_MISSING_SIGALGS_EXTENSION);
return 0; return 0;
} }
@ -1304,8 +1287,7 @@ static int final_key_share(SSL *s, unsigned int context, int sent)
&& (!s->hit && (!s->hit
|| (s->ext.psk_kex_mode & TLSEXT_KEX_MODE_FLAG_KE) == 0)) { || (s->ext.psk_kex_mode & TLSEXT_KEX_MODE_FLAG_KE) == 0)) {
/* Nothing left we can do - just fail */ /* Nothing left we can do - just fail */
SSLfatal(s, SSL_AD_MISSING_EXTENSION, SSL_F_FINAL_KEY_SHARE, SSLfatal(s, SSL_AD_MISSING_EXTENSION, SSL_R_NO_SUITABLE_KEY_SHARE);
SSL_R_NO_SUITABLE_KEY_SHARE);
return 0; return 0;
} }
/* /*
@ -1353,8 +1335,7 @@ static int final_key_share(SSL *s, unsigned int context, int sent)
* previously sent HRR - so how can this be anything other * previously sent HRR - so how can this be anything other
* than 0? * than 0?
*/ */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_FINAL_KEY_SHARE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
s->hello_retry_request = SSL_HRR_PENDING; s->hello_retry_request = SSL_HRR_PENDING;
@ -1399,7 +1380,7 @@ static int final_key_share(SSL *s, unsigned int context, int sent)
/* Nothing left we can do - just fail */ /* Nothing left we can do - just fail */
SSLfatal(s, sent ? SSL_AD_HANDSHAKE_FAILURE SSLfatal(s, sent ? SSL_AD_HANDSHAKE_FAILURE
: SSL_AD_MISSING_EXTENSION, : SSL_AD_MISSING_EXTENSION,
SSL_F_FINAL_KEY_SHARE, SSL_R_NO_SUITABLE_KEY_SHARE); SSL_R_NO_SUITABLE_KEY_SHARE);
return 0; return 0;
} }
@ -1411,8 +1392,7 @@ static int final_key_share(SSL *s, unsigned int context, int sent)
* previously sent HRR - so how can this be anything other * previously sent HRR - so how can this be anything other
* than 0? * than 0?
*/ */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_FINAL_KEY_SHARE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
s->hello_retry_request = SSL_HRR_PENDING; s->hello_retry_request = SSL_HRR_PENDING;
@ -1433,8 +1413,7 @@ static int final_key_share(SSL *s, unsigned int context, int sent)
* processing). * processing).
*/ */
if (!sent && !tls13_generate_handshake_secret(s, NULL, 0)) { if (!sent && !tls13_generate_handshake_secret(s, NULL, 0)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_FINAL_KEY_SHARE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
} }
@ -1473,8 +1452,7 @@ int tls_psk_do_binder(SSL *s, const EVP_MD *md, const unsigned char *msgstart,
/* Ensure cast to size_t is safe */ /* Ensure cast to size_t is safe */
if (!ossl_assert(hashsizei >= 0)) { if (!ossl_assert(hashsizei >= 0)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PSK_DO_BINDER, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
hashsize = (size_t)hashsizei; hashsize = (size_t)hashsizei;
@ -1520,8 +1498,7 @@ int tls_psk_do_binder(SSL *s, const EVP_MD *md, const unsigned char *msgstart,
if (mctx == NULL if (mctx == NULL
|| EVP_DigestInit_ex(mctx, md, NULL) <= 0 || EVP_DigestInit_ex(mctx, md, NULL) <= 0
|| EVP_DigestFinal_ex(mctx, hash, NULL) <= 0) { || EVP_DigestFinal_ex(mctx, hash, NULL) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PSK_DO_BINDER, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -1539,8 +1516,7 @@ int tls_psk_do_binder(SSL *s, const EVP_MD *md, const unsigned char *msgstart,
} }
if (EVP_DigestInit_ex(mctx, md, NULL) <= 0) { if (EVP_DigestInit_ex(mctx, md, NULL) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PSK_DO_BINDER, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -1557,8 +1533,7 @@ int tls_psk_do_binder(SSL *s, const EVP_MD *md, const unsigned char *msgstart,
hdatalen = hdatalen_l = hdatalen = hdatalen_l =
BIO_get_mem_data(s->s3.handshake_buffer, &hdata); BIO_get_mem_data(s->s3.handshake_buffer, &hdata);
if (hdatalen_l <= 0) { if (hdatalen_l <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PSK_DO_BINDER, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_BAD_HANDSHAKE_LENGTH);
SSL_R_BAD_HANDSHAKE_LENGTH);
goto err; goto err;
} }
@ -1575,24 +1550,21 @@ int tls_psk_do_binder(SSL *s, const EVP_MD *md, const unsigned char *msgstart,
|| !PACKET_get_length_prefixed_3(&hashprefix, &msg) || !PACKET_get_length_prefixed_3(&hashprefix, &msg)
|| !PACKET_forward(&hashprefix, 1) || !PACKET_forward(&hashprefix, 1)
|| !PACKET_get_length_prefixed_3(&hashprefix, &msg)) { || !PACKET_get_length_prefixed_3(&hashprefix, &msg)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PSK_DO_BINDER, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
hdatalen -= PACKET_remaining(&hashprefix); hdatalen -= PACKET_remaining(&hashprefix);
} }
if (EVP_DigestUpdate(mctx, hdata, hdatalen) <= 0) { if (EVP_DigestUpdate(mctx, hdata, hdatalen) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PSK_DO_BINDER, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
} }
if (EVP_DigestUpdate(mctx, msgstart, binderoffset) <= 0 if (EVP_DigestUpdate(mctx, msgstart, binderoffset) <= 0
|| EVP_DigestFinal_ex(mctx, hash, NULL) <= 0) { || EVP_DigestFinal_ex(mctx, hash, NULL) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PSK_DO_BINDER, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -1600,8 +1572,7 @@ int tls_psk_do_binder(SSL *s, const EVP_MD *md, const unsigned char *msgstart,
s->ctx->propq, finishedkey, s->ctx->propq, finishedkey,
hashsize); hashsize);
if (mackey == NULL) { if (mackey == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PSK_DO_BINDER, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -1614,8 +1585,7 @@ int tls_psk_do_binder(SSL *s, const EVP_MD *md, const unsigned char *msgstart,
|| EVP_DigestSignUpdate(mctx, hash, hashsize) <= 0 || EVP_DigestSignUpdate(mctx, hash, hashsize) <= 0
|| EVP_DigestSignFinal(mctx, binderout, &bindersize) <= 0 || EVP_DigestSignFinal(mctx, binderout, &bindersize) <= 0
|| bindersize != hashsize) { || bindersize != hashsize) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PSK_DO_BINDER, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -1625,8 +1595,7 @@ int tls_psk_do_binder(SSL *s, const EVP_MD *md, const unsigned char *msgstart,
/* HMAC keys can't do EVP_DigestVerify* - use CRYPTO_memcmp instead */ /* HMAC keys can't do EVP_DigestVerify* - use CRYPTO_memcmp instead */
ret = (CRYPTO_memcmp(binderin, binderout, hashsize) == 0); ret = (CRYPTO_memcmp(binderin, binderout, hashsize) == 0);
if (!ret) if (!ret)
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_PSK_DO_BINDER, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BINDER_DOES_NOT_VERIFY);
SSL_R_BINDER_DOES_NOT_VERIFY);
} }
err: err:
@ -1652,8 +1621,7 @@ static int final_early_data(SSL *s, unsigned int context, int sent)
* later realised that it shouldn't have done (e.g. inconsistent * later realised that it shouldn't have done (e.g. inconsistent
* ALPN) * ALPN)
*/ */
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_FINAL_EARLY_DATA, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_EARLY_DATA);
SSL_R_BAD_EARLY_DATA);
return 0; return 0;
} }
@ -1690,8 +1658,7 @@ static int final_maxfragmentlen(SSL *s, unsigned int context, int sent)
*/ */
if (s->server && s->hit && USE_MAX_FRAGMENT_LENGTH_EXT(s->session) if (s->server && s->hit && USE_MAX_FRAGMENT_LENGTH_EXT(s->session)
&& !sent ) { && !sent ) {
SSLfatal(s, SSL_AD_MISSING_EXTENSION, SSL_F_FINAL_MAXFRAGMENTLEN, SSLfatal(s, SSL_AD_MISSING_EXTENSION, SSL_R_BAD_EXTENSION);
SSL_R_BAD_EXTENSION);
return 0; return 0;
} }

File diff suppressed because it is too large Load Diff

View File

@ -139,8 +139,7 @@ int custom_ext_parse(SSL *s, unsigned int context, unsigned int ext_type,
* extensions not sent in ClientHello. * extensions not sent in ClientHello.
*/ */
if ((meth->ext_flags & SSL_EXT_FLAG_SENT) == 0) { if ((meth->ext_flags & SSL_EXT_FLAG_SENT) == 0) {
SSLfatal(s, TLS1_AD_UNSUPPORTED_EXTENSION, SSL_F_CUSTOM_EXT_PARSE, SSLfatal(s, TLS1_AD_UNSUPPORTED_EXTENSION, SSL_R_BAD_EXTENSION);
SSL_R_BAD_EXTENSION);
return 0; return 0;
} }
} }
@ -159,7 +158,7 @@ int custom_ext_parse(SSL *s, unsigned int context, unsigned int ext_type,
if (meth->parse_cb(s, ext_type, context, ext_data, ext_size, x, chainidx, if (meth->parse_cb(s, ext_type, context, ext_data, ext_size, x, chainidx,
&al, meth->parse_arg) <= 0) { &al, meth->parse_arg) <= 0) {
SSLfatal(s, al, SSL_F_CUSTOM_EXT_PARSE, SSL_R_BAD_EXTENSION); SSLfatal(s, al, SSL_R_BAD_EXTENSION);
return 0; return 0;
} }
@ -209,7 +208,7 @@ int custom_ext_add(SSL *s, int context, WPACKET *pkt, X509 *x, size_t chainidx,
meth->add_arg); meth->add_arg);
if (cb_retval < 0) { if (cb_retval < 0) {
SSLfatal(s, al, SSL_F_CUSTOM_EXT_ADD, SSL_R_CALLBACK_FAILED); SSLfatal(s, al, SSL_R_CALLBACK_FAILED);
return 0; /* error */ return 0; /* error */
} }
if (cb_retval == 0) if (cb_retval == 0)
@ -220,8 +219,7 @@ int custom_ext_add(SSL *s, int context, WPACKET *pkt, X509 *x, size_t chainidx,
|| !WPACKET_start_sub_packet_u16(pkt) || !WPACKET_start_sub_packet_u16(pkt)
|| (outlen > 0 && !WPACKET_memcpy(pkt, out, outlen)) || (outlen > 0 && !WPACKET_memcpy(pkt, out, outlen))
|| !WPACKET_close(pkt)) { || !WPACKET_close(pkt)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CUSTOM_EXT_ADD, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
if ((context & SSL_EXT_CLIENT_HELLO) != 0) { if ((context & SSL_EXT_CLIENT_HELLO) != 0) {
@ -229,8 +227,7 @@ int custom_ext_add(SSL *s, int context, WPACKET *pkt, X509 *x, size_t chainidx,
* We can't send duplicates: code logic should prevent this. * We can't send duplicates: code logic should prevent this.
*/ */
if (!ossl_assert((meth->ext_flags & SSL_EXT_FLAG_SENT) == 0)) { if (!ossl_assert((meth->ext_flags & SSL_EXT_FLAG_SENT) == 0)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CUSTOM_EXT_ADD, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
/* /*

File diff suppressed because it is too large Load Diff

View File

@ -140,12 +140,11 @@ void ossl_statem_fatal(SSL *s, int al, int reason, const char *fmt, ...)
* a fatal error state. We verify that we are, and set it if not (this would * a fatal error state. We verify that we are, and set it if not (this would
* indicate a bug). * indicate a bug).
*/ */
#define check_fatal(s, f) \ #define check_fatal(s) \
do { \ do { \
if (!ossl_assert((s)->statem.in_init \ if (!ossl_assert((s)->statem.in_init \
&& (s)->statem.state == MSG_FLOW_ERROR)) \ && (s)->statem.state == MSG_FLOW_ERROR)) \
SSLfatal(s, SSL_AD_INTERNAL_ERROR, (f), \ SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_MISSING_FATAL); \
SSL_R_MISSING_FATAL); \
} while (0) } while (0)
/* /*
@ -362,33 +361,28 @@ static int state_machine(SSL *s, int server)
if (SSL_IS_DTLS(s)) { if (SSL_IS_DTLS(s)) {
if ((s->version & 0xff00) != (DTLS1_VERSION & 0xff00) && if ((s->version & 0xff00) != (DTLS1_VERSION & 0xff00) &&
(server || (s->version & 0xff00) != (DTLS1_BAD_VER & 0xff00))) { (server || (s->version & 0xff00) != (DTLS1_BAD_VER & 0xff00))) {
SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_STATE_MACHINE, SSLfatal(s, SSL_AD_NO_ALERT, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto end; goto end;
} }
} else { } else {
if ((s->version >> 8) != SSL3_VERSION_MAJOR) { if ((s->version >> 8) != SSL3_VERSION_MAJOR) {
SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_STATE_MACHINE, SSLfatal(s, SSL_AD_NO_ALERT, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto end; goto end;
} }
} }
if (!ssl_security(s, SSL_SECOP_VERSION, 0, s->version, NULL)) { if (!ssl_security(s, SSL_SECOP_VERSION, 0, s->version, NULL)) {
SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_STATE_MACHINE, SSLfatal(s, SSL_AD_NO_ALERT, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto end; goto end;
} }
if (s->init_buf == NULL) { if (s->init_buf == NULL) {
if ((buf = BUF_MEM_new()) == NULL) { if ((buf = BUF_MEM_new()) == NULL) {
SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_STATE_MACHINE, SSLfatal(s, SSL_AD_NO_ALERT, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto end; goto end;
} }
if (!BUF_MEM_grow(buf, SSL3_RT_MAX_PLAIN_LENGTH)) { if (!BUF_MEM_grow(buf, SSL3_RT_MAX_PLAIN_LENGTH)) {
SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_STATE_MACHINE, SSLfatal(s, SSL_AD_NO_ALERT, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto end; goto end;
} }
s->init_buf = buf; s->init_buf = buf;
@ -396,8 +390,7 @@ static int state_machine(SSL *s, int server)
} }
if (!ssl3_setup_buffers(s)) { if (!ssl3_setup_buffers(s)) {
SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_STATE_MACHINE, SSLfatal(s, SSL_AD_NO_ALERT, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto end; goto end;
} }
s->init_num = 0; s->init_num = 0;
@ -415,8 +408,7 @@ static int state_machine(SSL *s, int server)
if (!SSL_IS_DTLS(s) || !BIO_dgram_is_sctp(SSL_get_wbio(s))) if (!SSL_IS_DTLS(s) || !BIO_dgram_is_sctp(SSL_get_wbio(s)))
#endif #endif
if (!ssl_init_wbio_buffer(s)) { if (!ssl_init_wbio_buffer(s)) {
SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_STATE_MACHINE, SSLfatal(s, SSL_AD_NO_ALERT, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto end; goto end;
} }
@ -458,7 +450,7 @@ static int state_machine(SSL *s, int server)
} }
} else { } else {
/* Error */ /* Error */
check_fatal(s, SSL_F_STATE_MACHINE); check_fatal(s);
ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); ERR_raise(ERR_LIB_SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
goto end; goto end;
} }
@ -605,7 +597,7 @@ static SUB_STATE_RETURN read_state_machine(SSL *s)
return SUB_STATE_ERROR; return SUB_STATE_ERROR;
if (s->s3.tmp.message_size > max_message_size(s)) { if (s->s3.tmp.message_size > max_message_size(s)) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_READ_STATE_MACHINE, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
SSL_R_EXCESSIVE_MESSAGE_SIZE); SSL_R_EXCESSIVE_MESSAGE_SIZE);
return SUB_STATE_ERROR; return SUB_STATE_ERROR;
} }
@ -615,8 +607,7 @@ static SUB_STATE_RETURN read_state_machine(SSL *s)
&& s->s3.tmp.message_size > 0 && s->s3.tmp.message_size > 0
&& !grow_init_buf(s, s->s3.tmp.message_size && !grow_init_buf(s, s->s3.tmp.message_size
+ SSL3_HM_HEADER_LENGTH)) { + SSL3_HM_HEADER_LENGTH)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_READ_STATE_MACHINE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_BUF_LIB);
ERR_R_BUF_LIB);
return SUB_STATE_ERROR; return SUB_STATE_ERROR;
} }
@ -635,8 +626,7 @@ static SUB_STATE_RETURN read_state_machine(SSL *s)
s->first_packet = 0; s->first_packet = 0;
if (!PACKET_buf_init(&pkt, s->init_msg, len)) { if (!PACKET_buf_init(&pkt, s->init_msg, len)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_READ_STATE_MACHINE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return SUB_STATE_ERROR; return SUB_STATE_ERROR;
} }
ret = process_message(s, &pkt); ret = process_message(s, &pkt);
@ -646,7 +636,7 @@ static SUB_STATE_RETURN read_state_machine(SSL *s)
switch (ret) { switch (ret) {
case MSG_PROCESS_ERROR: case MSG_PROCESS_ERROR:
check_fatal(s, SSL_F_READ_STATE_MACHINE); check_fatal(s);
return SUB_STATE_ERROR; return SUB_STATE_ERROR;
case MSG_PROCESS_FINISHED_READING: case MSG_PROCESS_FINISHED_READING:
@ -670,7 +660,7 @@ static SUB_STATE_RETURN read_state_machine(SSL *s)
st->read_state_work = post_process_message(s, st->read_state_work); st->read_state_work = post_process_message(s, st->read_state_work);
switch (st->read_state_work) { switch (st->read_state_work) {
case WORK_ERROR: case WORK_ERROR:
check_fatal(s, SSL_F_READ_STATE_MACHINE); check_fatal(s);
/* Fall through */ /* Fall through */
case WORK_MORE_A: case WORK_MORE_A:
case WORK_MORE_B: case WORK_MORE_B:
@ -691,8 +681,7 @@ static SUB_STATE_RETURN read_state_machine(SSL *s)
default: default:
/* Shouldn't happen */ /* Shouldn't happen */
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_READ_STATE_MACHINE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return SUB_STATE_ERROR; return SUB_STATE_ERROR;
} }
} }
@ -807,7 +796,7 @@ static SUB_STATE_RETURN write_state_machine(SSL *s)
break; break;
case WRITE_TRAN_ERROR: case WRITE_TRAN_ERROR:
check_fatal(s, SSL_F_WRITE_STATE_MACHINE); check_fatal(s);
return SUB_STATE_ERROR; return SUB_STATE_ERROR;
} }
break; break;
@ -815,7 +804,7 @@ static SUB_STATE_RETURN write_state_machine(SSL *s)
case WRITE_STATE_PRE_WORK: case WRITE_STATE_PRE_WORK:
switch (st->write_state_work = pre_work(s, st->write_state_work)) { switch (st->write_state_work = pre_work(s, st->write_state_work)) {
case WORK_ERROR: case WORK_ERROR:
check_fatal(s, SSL_F_WRITE_STATE_MACHINE); check_fatal(s);
/* Fall through */ /* Fall through */
case WORK_MORE_A: case WORK_MORE_A:
case WORK_MORE_B: case WORK_MORE_B:
@ -842,20 +831,18 @@ static SUB_STATE_RETURN write_state_machine(SSL *s)
if (!WPACKET_init(&pkt, s->init_buf) if (!WPACKET_init(&pkt, s->init_buf)
|| !ssl_set_handshake_header(s, &pkt, mt)) { || !ssl_set_handshake_header(s, &pkt, mt)) {
WPACKET_cleanup(&pkt); WPACKET_cleanup(&pkt);
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_WRITE_STATE_MACHINE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return SUB_STATE_ERROR; return SUB_STATE_ERROR;
} }
if (confunc != NULL && !confunc(s, &pkt)) { if (confunc != NULL && !confunc(s, &pkt)) {
WPACKET_cleanup(&pkt); WPACKET_cleanup(&pkt);
check_fatal(s, SSL_F_WRITE_STATE_MACHINE); check_fatal(s);
return SUB_STATE_ERROR; return SUB_STATE_ERROR;
} }
if (!ssl_close_construct_packet(s, &pkt, mt) if (!ssl_close_construct_packet(s, &pkt, mt)
|| !WPACKET_finish(&pkt)) { || !WPACKET_finish(&pkt)) {
WPACKET_cleanup(&pkt); WPACKET_cleanup(&pkt);
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_WRITE_STATE_MACHINE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return SUB_STATE_ERROR; return SUB_STATE_ERROR;
} }
@ -876,7 +863,7 @@ static SUB_STATE_RETURN write_state_machine(SSL *s)
case WRITE_STATE_POST_WORK: case WRITE_STATE_POST_WORK:
switch (st->write_state_work = post_work(s, st->write_state_work)) { switch (st->write_state_work = post_work(s, st->write_state_work)) {
case WORK_ERROR: case WORK_ERROR:
check_fatal(s, SSL_F_WRITE_STATE_MACHINE); check_fatal(s);
/* Fall through */ /* Fall through */
case WORK_MORE_A: case WORK_MORE_A:
case WORK_MORE_B: case WORK_MORE_B:
@ -893,8 +880,7 @@ static SUB_STATE_RETURN write_state_machine(SSL *s)
break; break;
default: default:
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_WRITE_STATE_MACHINE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return SUB_STATE_ERROR; return SUB_STATE_ERROR;
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -426,8 +426,7 @@ static int dtls1_preprocess_fragment(SSL *s, struct hm_header_st *msg_hdr)
/* sanity checking */ /* sanity checking */
if ((frag_off + frag_len) > msg_len if ((frag_off + frag_len) > msg_len
|| msg_len > dtls1_max_handshake_message_len(s)) { || msg_len > dtls1_max_handshake_message_len(s)) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_DTLS1_PREPROCESS_FRAGMENT, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_EXCESSIVE_MESSAGE_SIZE);
SSL_R_EXCESSIVE_MESSAGE_SIZE);
return 0; return 0;
} }
@ -437,8 +436,7 @@ static int dtls1_preprocess_fragment(SSL *s, struct hm_header_st *msg_hdr)
* dtls_max_handshake_message_len(s) above * dtls_max_handshake_message_len(s) above
*/ */
if (!BUF_MEM_grow_clean(s->init_buf, msg_len + DTLS1_HM_HEADER_LENGTH)) { if (!BUF_MEM_grow_clean(s->init_buf, msg_len + DTLS1_HM_HEADER_LENGTH)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DTLS1_PREPROCESS_FRAGMENT, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_BUF_LIB);
ERR_R_BUF_LIB);
return 0; return 0;
} }
@ -452,8 +450,7 @@ static int dtls1_preprocess_fragment(SSL *s, struct hm_header_st *msg_hdr)
* They must be playing with us! BTW, failure to enforce upper limit * They must be playing with us! BTW, failure to enforce upper limit
* would open possibility for buffer overrun. * would open possibility for buffer overrun.
*/ */
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_DTLS1_PREPROCESS_FRAGMENT, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_EXCESSIVE_MESSAGE_SIZE);
SSL_R_EXCESSIVE_MESSAGE_SIZE);
return 0; return 0;
} }
@ -768,7 +765,6 @@ static int dtls_get_reassembled_message(SSL *s, int *errtype, size_t *len)
if (recvd_type == SSL3_RT_CHANGE_CIPHER_SPEC) { if (recvd_type == SSL3_RT_CHANGE_CIPHER_SPEC) {
if (wire[0] != SSL3_MT_CCS) { if (wire[0] != SSL3_MT_CCS) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
SSL_F_DTLS_GET_REASSEMBLED_MESSAGE,
SSL_R_BAD_CHANGE_CIPHER_SPEC); SSL_R_BAD_CHANGE_CIPHER_SPEC);
goto f_err; goto f_err;
} }
@ -784,8 +780,7 @@ static int dtls_get_reassembled_message(SSL *s, int *errtype, size_t *len)
/* Handshake fails if message header is incomplete */ /* Handshake fails if message header is incomplete */
if (readbytes != DTLS1_HM_HEADER_LENGTH) { if (readbytes != DTLS1_HM_HEADER_LENGTH) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_UNEXPECTED_MESSAGE);
SSL_F_DTLS_GET_REASSEMBLED_MESSAGE, SSL_R_UNEXPECTED_MESSAGE);
goto f_err; goto f_err;
} }
@ -801,8 +796,7 @@ static int dtls_get_reassembled_message(SSL *s, int *errtype, size_t *len)
* Fragments must not span records. * Fragments must not span records.
*/ */
if (frag_len > RECORD_LAYER_get_rrec_length(&s->rlayer)) { if (frag_len > RECORD_LAYER_get_rrec_length(&s->rlayer)) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_LENGTH);
SSL_F_DTLS_GET_REASSEMBLED_MESSAGE, SSL_R_BAD_LENGTH);
goto f_err; goto f_err;
} }
@ -841,9 +835,7 @@ static int dtls_get_reassembled_message(SSL *s, int *errtype, size_t *len)
goto redo; goto redo;
} else { /* Incorrectly formatted Hello request */ } else { /* Incorrectly formatted Hello request */
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_UNEXPECTED_MESSAGE);
SSL_F_DTLS_GET_REASSEMBLED_MESSAGE,
SSL_R_UNEXPECTED_MESSAGE);
goto f_err; goto f_err;
} }
} }
@ -878,8 +870,7 @@ static int dtls_get_reassembled_message(SSL *s, int *errtype, size_t *len)
* to fail * to fail
*/ */
if (readbytes != frag_len) { if (readbytes != frag_len) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_LENGTH);
SSL_F_DTLS_GET_REASSEMBLED_MESSAGE, SSL_R_BAD_LENGTH);
goto f_err; goto f_err;
} }
@ -913,9 +904,7 @@ int dtls_construct_change_cipher_spec(SSL *s, WPACKET *pkt)
s->d1->next_handshake_write_seq++; s->d1->next_handshake_write_seq++;
if (!WPACKET_put_bytes_u16(pkt, s->d1->handshake_write_seq)) { if (!WPACKET_put_bytes_u16(pkt, s->d1->handshake_write_seq)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC,
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
} }
@ -936,8 +925,7 @@ WORK_STATE dtls_wait_for_dry(SSL *s)
/* read app data until dry event */ /* read app data until dry event */
ret = BIO_dgram_sctp_wait_for_dry(SSL_get_wbio(s)); ret = BIO_dgram_sctp_wait_for_dry(SSL_get_wbio(s));
if (ret < 0) { if (ret < 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DTLS_WAIT_FOR_DRY, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return WORK_ERROR; return WORK_ERROR;
} }
@ -950,8 +938,7 @@ WORK_STATE dtls_wait_for_dry(SSL *s)
*/ */
if (dtls_get_reassembled_message(s, &errtype, &len)) { if (dtls_get_reassembled_message(s, &errtype, &len)) {
/* The call succeeded! This should never happen */ /* The call succeeded! This should never happen */
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_DTLS_WAIT_FOR_DRY, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_UNEXPECTED_MESSAGE);
SSL_R_UNEXPECTED_MESSAGE);
return WORK_ERROR; return WORK_ERROR;
} }
@ -968,8 +955,7 @@ WORK_STATE dtls_wait_for_dry(SSL *s)
int dtls1_read_failed(SSL *s, int code) int dtls1_read_failed(SSL *s, int code)
{ {
if (code > 0) { if (code > 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_DTLS1_READ_FAILED, ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -1115,8 +1101,7 @@ int dtls1_retransmit_message(SSL *s, unsigned short seq, int *found)
item = pqueue_find(s->d1->sent_messages, seq64be); item = pqueue_find(s->d1->sent_messages, seq64be);
if (item == NULL) { if (item == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DTLS1_RETRANSMIT_MESSAGE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
*found = 0; *found = 0;
return 0; return 0;
} }

View File

@ -101,8 +101,7 @@ int tls_setup_handshake(SSL *s)
memset(s->ext.extflags, 0, sizeof(s->ext.extflags)); memset(s->ext.extflags, 0, sizeof(s->ext.extflags));
if (ssl_get_min_max_version(s, &ver_min, &ver_max, NULL) != 0) { if (ssl_get_min_max_version(s, &ver_min, &ver_max, NULL) != 0) {
SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSL_F_TLS_SETUP_HANDSHAKE, SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSL_R_NO_PROTOCOLS_AVAILABLE);
SSL_R_NO_PROTOCOLS_AVAILABLE);
return 0; return 0;
} }
@ -119,12 +118,12 @@ int tls_setup_handshake(SSL *s)
md5sha1_needed = 1; md5sha1_needed = 1;
} }
if (md5sha1_needed) { if (md5sha1_needed) {
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS_SETUP_HANDSHAKE, SSLfatal_data(s, SSL_AD_HANDSHAKE_FAILURE,
SSL_R_NO_SUITABLE_DIGEST_ALGORITHM); SSL_R_NO_SUITABLE_DIGEST_ALGORITHM,
ERR_add_error_data(1, "The max supported SSL/TLS version needs the" "The max supported SSL/TLS version needs the"
" MD5-SHA1 digest but it is not available" " MD5-SHA1 digest but it is not available"
" in the loaded providers. Use (D)TLSv1.2 or" " in the loaded providers. Use (D)TLSv1.2 or"
" above, or load different providers"); " above, or load different providers");
return 0; return 0;
} }
@ -139,8 +138,7 @@ int tls_setup_handshake(SSL *s)
} }
if (!ok) { if (!ok) {
/* Shouldn't happen */ /* Shouldn't happen */
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS_SETUP_HANDSHAKE, SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
} }
@ -169,10 +167,10 @@ int tls_setup_handshake(SSL *s)
break; break;
} }
if (!ok) { if (!ok) {
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS_SETUP_HANDSHAKE, SSLfatal_data(s, SSL_AD_HANDSHAKE_FAILURE,
SSL_R_NO_CIPHERS_AVAILABLE); SSL_R_NO_CIPHERS_AVAILABLE,
ERR_add_error_data(1, "No ciphers enabled for max supported " "No ciphers enabled for max supported "
"SSL/TLS version"); "SSL/TLS version");
return 0; return 0;
} }
if (SSL_IS_FIRST_HANDSHAKE(s)) { if (SSL_IS_FIRST_HANDSHAKE(s)) {
@ -262,8 +260,7 @@ static int get_cert_verify_tbs_data(SSL *s, unsigned char *tls13tbs,
retlen = retlen_l = BIO_get_mem_data(s->s3.handshake_buffer, hdata); retlen = retlen_l = BIO_get_mem_data(s->s3.handshake_buffer, hdata);
if (retlen_l <= 0) { if (retlen_l <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_GET_CERT_VERIFY_TBS_DATA, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
*hdatalen = retlen; *hdatalen = retlen;
@ -285,22 +282,19 @@ int tls_construct_cert_verify(SSL *s, WPACKET *pkt)
const SIGALG_LOOKUP *lu = s->s3.tmp.sigalg; const SIGALG_LOOKUP *lu = s->s3.tmp.sigalg;
if (lu == NULL || s->s3.tmp.cert == NULL) { if (lu == NULL || s->s3.tmp.cert == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
pkey = s->s3.tmp.cert->privatekey; pkey = s->s3.tmp.cert->privatekey;
if (pkey == NULL || !tls1_lookup_md(s->ctx, lu, &md)) { if (pkey == NULL || !tls1_lookup_md(s->ctx, lu, &md)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
mctx = EVP_MD_CTX_new(); mctx = EVP_MD_CTX_new();
if (mctx == NULL) { if (mctx == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
@ -311,15 +305,13 @@ int tls_construct_cert_verify(SSL *s, WPACKET *pkt)
} }
if (SSL_USE_SIGALGS(s) && !WPACKET_put_bytes_u16(pkt, lu->sigalg)) { if (SSL_USE_SIGALGS(s) && !WPACKET_put_bytes_u16(pkt, lu->sigalg)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
if (EVP_DigestSignInit_ex(mctx, &pctx, md == NULL ? NULL : EVP_MD_name(md), if (EVP_DigestSignInit_ex(mctx, &pctx, md == NULL ? NULL : EVP_MD_name(md),
s->ctx->libctx, s->ctx->propq, pkey) <= 0) { s->ctx->libctx, s->ctx->propq, pkey) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
ERR_R_EVP_LIB);
goto err; goto err;
} }
@ -327,8 +319,7 @@ int tls_construct_cert_verify(SSL *s, WPACKET *pkt)
if (EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING) <= 0 if (EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING) <= 0
|| EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx, || EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx,
RSA_PSS_SALTLEN_DIGEST) <= 0) { RSA_PSS_SALTLEN_DIGEST) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
ERR_R_EVP_LIB);
goto err; goto err;
} }
} }
@ -347,15 +338,13 @@ int tls_construct_cert_verify(SSL *s, WPACKET *pkt)
s->session->master_key) <= 0 s->session->master_key) <= 0
|| EVP_DigestSignFinal(mctx, NULL, &siglen) <= 0) { || EVP_DigestSignFinal(mctx, NULL, &siglen) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
ERR_R_EVP_LIB);
goto err; goto err;
} }
sig = OPENSSL_malloc(siglen); sig = OPENSSL_malloc(siglen);
if (sig == NULL if (sig == NULL
|| EVP_DigestSignFinal(mctx, sig, &siglen) <= 0) { || EVP_DigestSignFinal(mctx, sig, &siglen) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
ERR_R_EVP_LIB);
goto err; goto err;
} }
} else { } else {
@ -364,15 +353,13 @@ int tls_construct_cert_verify(SSL *s, WPACKET *pkt)
* support streaming via EVP_DigestSignUpdate/EVP_DigestSignFinal * support streaming via EVP_DigestSignUpdate/EVP_DigestSignFinal
*/ */
if (EVP_DigestSign(mctx, NULL, &siglen, hdata, hdatalen) <= 0) { if (EVP_DigestSign(mctx, NULL, &siglen, hdata, hdatalen) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
ERR_R_EVP_LIB);
goto err; goto err;
} }
sig = OPENSSL_malloc(siglen); sig = OPENSSL_malloc(siglen);
if (sig == NULL if (sig == NULL
|| EVP_DigestSign(mctx, sig, &siglen, hdata, hdatalen) <= 0) { || EVP_DigestSign(mctx, sig, &siglen, hdata, hdatalen) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
ERR_R_EVP_LIB);
goto err; goto err;
} }
} }
@ -389,8 +376,7 @@ int tls_construct_cert_verify(SSL *s, WPACKET *pkt)
#endif #endif
if (!WPACKET_sub_memcpy_u16(pkt, sig, siglen)) { if (!WPACKET_sub_memcpy_u16(pkt, sig, siglen)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_VERIFY, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -428,21 +414,19 @@ MSG_PROCESS_RETURN tls_process_cert_verify(SSL *s, PACKET *pkt)
EVP_PKEY_CTX *pctx = NULL; EVP_PKEY_CTX *pctx = NULL;
if (mctx == NULL) { if (mctx == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
peer = s->session->peer; peer = s->session->peer;
pkey = X509_get0_pubkey(peer); pkey = X509_get0_pubkey(peer);
if (pkey == NULL) { if (pkey == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
if (ssl_cert_lookup_by_pkey(pkey, NULL) == NULL) { if (ssl_cert_lookup_by_pkey(pkey, NULL) == NULL) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_PROCESS_CERT_VERIFY, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE); SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE);
goto err; goto err;
} }
@ -451,8 +435,7 @@ MSG_PROCESS_RETURN tls_process_cert_verify(SSL *s, PACKET *pkt)
unsigned int sigalg; unsigned int sigalg;
if (!PACKET_get_net_2(pkt, &sigalg)) { if (!PACKET_get_net_2(pkt, &sigalg)) {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY, SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_PACKET);
SSL_R_BAD_PACKET);
goto err; goto err;
} }
if (tls12_check_peer_sigalg(s, sigalg, pkey) <= 0) { if (tls12_check_peer_sigalg(s, sigalg, pkey) <= 0) {
@ -460,14 +443,12 @@ MSG_PROCESS_RETURN tls_process_cert_verify(SSL *s, PACKET *pkt)
goto err; goto err;
} }
} else if (!tls1_set_peer_legacy_sigalg(s, pkey)) { } else if (!tls1_set_peer_legacy_sigalg(s, pkey)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
if (!tls1_lookup_md(s->ctx, s->s3.tmp.peer_sigalg, &md)) { if (!tls1_lookup_md(s->ctx, s->s3.tmp.peer_sigalg, &md)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -491,14 +472,12 @@ MSG_PROCESS_RETURN tls_process_cert_verify(SSL *s, PACKET *pkt)
} else } else
#endif #endif
if (!PACKET_get_net_2(pkt, &len)) { if (!PACKET_get_net_2(pkt, &len)) {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY, SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
SSL_R_LENGTH_MISMATCH);
goto err; goto err;
} }
if (!PACKET_get_bytes(pkt, &data, len)) { if (!PACKET_get_bytes(pkt, &data, len)) {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY, SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
SSL_R_LENGTH_MISMATCH);
goto err; goto err;
} }
@ -513,8 +492,7 @@ MSG_PROCESS_RETURN tls_process_cert_verify(SSL *s, PACKET *pkt)
if (EVP_DigestVerifyInit_ex(mctx, &pctx, if (EVP_DigestVerifyInit_ex(mctx, &pctx,
md == NULL ? NULL : EVP_MD_name(md), md == NULL ? NULL : EVP_MD_name(md),
s->ctx->libctx, s->ctx->propq, pkey) <= 0) { s->ctx->libctx, s->ctx->propq, pkey) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
ERR_R_EVP_LIB);
goto err; goto err;
} }
#ifndef OPENSSL_NO_GOST #ifndef OPENSSL_NO_GOST
@ -524,8 +502,7 @@ MSG_PROCESS_RETURN tls_process_cert_verify(SSL *s, PACKET *pkt)
|| pktype == NID_id_GostR3410_2012_256 || pktype == NID_id_GostR3410_2012_256
|| pktype == NID_id_GostR3410_2012_512) { || pktype == NID_id_GostR3410_2012_512) {
if ((gost_data = OPENSSL_malloc(len)) == NULL) { if ((gost_data = OPENSSL_malloc(len)) == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
SSL_F_TLS_PROCESS_CERT_VERIFY, ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
BUF_reverse(gost_data, data, len); BUF_reverse(gost_data, data, len);
@ -538,8 +515,7 @@ MSG_PROCESS_RETURN tls_process_cert_verify(SSL *s, PACKET *pkt)
if (EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING) <= 0 if (EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING) <= 0
|| EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx, || EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx,
RSA_PSS_SALTLEN_DIGEST) <= 0) { RSA_PSS_SALTLEN_DIGEST) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
ERR_R_EVP_LIB);
goto err; goto err;
} }
} }
@ -552,20 +528,17 @@ MSG_PROCESS_RETURN tls_process_cert_verify(SSL *s, PACKET *pkt)
|| EVP_MD_CTX_ctrl(mctx, EVP_CTRL_SSL3_MASTER_SECRET, || EVP_MD_CTX_ctrl(mctx, EVP_CTRL_SSL3_MASTER_SECRET,
(int)s->session->master_key_length, (int)s->session->master_key_length,
s->session->master_key) <= 0) { s->session->master_key) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
ERR_R_EVP_LIB);
goto err; goto err;
} }
if (EVP_DigestVerifyFinal(mctx, data, len) <= 0) { if (EVP_DigestVerifyFinal(mctx, data, len) <= 0) {
SSLfatal(s, SSL_AD_DECRYPT_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY, SSLfatal(s, SSL_AD_DECRYPT_ERROR, SSL_R_BAD_SIGNATURE);
SSL_R_BAD_SIGNATURE);
goto err; goto err;
} }
} else { } else {
j = EVP_DigestVerify(mctx, data, len, hdata, hdatalen); j = EVP_DigestVerify(mctx, data, len, hdata, hdatalen);
if (j <= 0) { if (j <= 0) {
SSLfatal(s, SSL_AD_DECRYPT_ERROR, SSL_F_TLS_PROCESS_CERT_VERIFY, SSLfatal(s, SSL_AD_DECRYPT_ERROR, SSL_R_BAD_SIGNATURE);
SSL_R_BAD_SIGNATURE);
goto err; goto err;
} }
} }
@ -634,8 +607,7 @@ int tls_construct_finished(SSL *s, WPACKET *pkt)
s->s3.tmp.finish_md_len = finish_md_len; s->s3.tmp.finish_md_len = finish_md_len;
if (!WPACKET_memcpy(pkt, s->s3.tmp.finish_md, finish_md_len)) { if (!WPACKET_memcpy(pkt, s->s3.tmp.finish_md, finish_md_len)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_FINISHED, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -654,8 +626,7 @@ int tls_construct_finished(SSL *s, WPACKET *pkt)
* Copy the finished so we can use it for renegotiation checks * Copy the finished so we can use it for renegotiation checks
*/ */
if (!ossl_assert(finish_md_len <= EVP_MAX_MD_SIZE)) { if (!ossl_assert(finish_md_len <= EVP_MAX_MD_SIZE)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_FINISHED, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
if (!s->server) { if (!s->server) {
@ -674,8 +645,7 @@ int tls_construct_finished(SSL *s, WPACKET *pkt)
int tls_construct_key_update(SSL *s, WPACKET *pkt) int tls_construct_key_update(SSL *s, WPACKET *pkt)
{ {
if (!WPACKET_put_bytes_u8(pkt, s->key_update)) { if (!WPACKET_put_bytes_u8(pkt, s->key_update)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_KEY_UPDATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -692,15 +662,13 @@ MSG_PROCESS_RETURN tls_process_key_update(SSL *s, PACKET *pkt)
* be on a record boundary. * be on a record boundary.
*/ */
if (RECORD_LAYER_processed_read_pending(&s->rlayer)) { if (RECORD_LAYER_processed_read_pending(&s->rlayer)) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_TLS_PROCESS_KEY_UPDATE, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_NOT_ON_RECORD_BOUNDARY);
SSL_R_NOT_ON_RECORD_BOUNDARY);
return MSG_PROCESS_ERROR; return MSG_PROCESS_ERROR;
} }
if (!PACKET_get_1(pkt, &updatetype) if (!PACKET_get_1(pkt, &updatetype)
|| PACKET_remaining(pkt) != 0) { || PACKET_remaining(pkt) != 0) {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_KEY_UPDATE, SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_KEY_UPDATE);
SSL_R_BAD_KEY_UPDATE);
return MSG_PROCESS_ERROR; return MSG_PROCESS_ERROR;
} }
@ -710,8 +678,7 @@ MSG_PROCESS_RETURN tls_process_key_update(SSL *s, PACKET *pkt)
*/ */
if (updatetype != SSL_KEY_UPDATE_NOT_REQUESTED if (updatetype != SSL_KEY_UPDATE_NOT_REQUESTED
&& updatetype != SSL_KEY_UPDATE_REQUESTED) { && updatetype != SSL_KEY_UPDATE_REQUESTED) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_PROCESS_KEY_UPDATE, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_KEY_UPDATE);
SSL_R_BAD_KEY_UPDATE);
return MSG_PROCESS_ERROR; return MSG_PROCESS_ERROR;
} }
@ -775,31 +742,25 @@ MSG_PROCESS_RETURN tls_process_change_cipher_spec(SSL *s, PACKET *pkt)
&& remain != DTLS1_CCS_HEADER_LENGTH + 1) && remain != DTLS1_CCS_HEADER_LENGTH + 1)
|| (s->version != DTLS1_BAD_VER || (s->version != DTLS1_BAD_VER
&& remain != DTLS1_CCS_HEADER_LENGTH - 1)) { && remain != DTLS1_CCS_HEADER_LENGTH - 1)) {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_CHANGE_CIPHER_SPEC);
SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC,
SSL_R_BAD_CHANGE_CIPHER_SPEC);
return MSG_PROCESS_ERROR; return MSG_PROCESS_ERROR;
} }
} else { } else {
if (remain != 0) { if (remain != 0) {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_CHANGE_CIPHER_SPEC);
SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC,
SSL_R_BAD_CHANGE_CIPHER_SPEC);
return MSG_PROCESS_ERROR; return MSG_PROCESS_ERROR;
} }
} }
/* Check we have a cipher to change to */ /* Check we have a cipher to change to */
if (s->s3.tmp.new_cipher == NULL) { if (s->s3.tmp.new_cipher == NULL) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_CCS_RECEIVED_EARLY);
SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC, SSL_R_CCS_RECEIVED_EARLY);
return MSG_PROCESS_ERROR; return MSG_PROCESS_ERROR;
} }
s->s3.change_cipher_spec = 1; s->s3.change_cipher_spec = 1;
if (!ssl3_do_change_cipher_spec(s)) { if (!ssl3_do_change_cipher_spec(s)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return MSG_PROCESS_ERROR; return MSG_PROCESS_ERROR;
} }
@ -848,15 +809,13 @@ MSG_PROCESS_RETURN tls_process_finished(SSL *s, PACKET *pkt)
* message must be on a record boundary. * message must be on a record boundary.
*/ */
if (SSL_IS_TLS13(s) && RECORD_LAYER_processed_read_pending(&s->rlayer)) { if (SSL_IS_TLS13(s) && RECORD_LAYER_processed_read_pending(&s->rlayer)) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_TLS_PROCESS_FINISHED, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_NOT_ON_RECORD_BOUNDARY);
SSL_R_NOT_ON_RECORD_BOUNDARY);
return MSG_PROCESS_ERROR; return MSG_PROCESS_ERROR;
} }
/* If this occurs, we have missed a message */ /* If this occurs, we have missed a message */
if (!SSL_IS_TLS13(s) && !s->s3.change_cipher_spec) { if (!SSL_IS_TLS13(s) && !s->s3.change_cipher_spec) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_TLS_PROCESS_FINISHED, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_GOT_A_FIN_BEFORE_A_CCS);
SSL_R_GOT_A_FIN_BEFORE_A_CCS);
return MSG_PROCESS_ERROR; return MSG_PROCESS_ERROR;
} }
s->s3.change_cipher_spec = 0; s->s3.change_cipher_spec = 0;
@ -864,15 +823,13 @@ MSG_PROCESS_RETURN tls_process_finished(SSL *s, PACKET *pkt)
md_len = s->s3.tmp.peer_finish_md_len; md_len = s->s3.tmp.peer_finish_md_len;
if (md_len != PACKET_remaining(pkt)) { if (md_len != PACKET_remaining(pkt)) {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_FINISHED, SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_BAD_DIGEST_LENGTH);
SSL_R_BAD_DIGEST_LENGTH);
return MSG_PROCESS_ERROR; return MSG_PROCESS_ERROR;
} }
if (CRYPTO_memcmp(PACKET_data(pkt), s->s3.tmp.peer_finish_md, if (CRYPTO_memcmp(PACKET_data(pkt), s->s3.tmp.peer_finish_md,
md_len) != 0) { md_len) != 0) {
SSLfatal(s, SSL_AD_DECRYPT_ERROR, SSL_F_TLS_PROCESS_FINISHED, SSLfatal(s, SSL_AD_DECRYPT_ERROR, SSL_R_DIGEST_CHECK_FAILED);
SSL_R_DIGEST_CHECK_FAILED);
return MSG_PROCESS_ERROR; return MSG_PROCESS_ERROR;
} }
@ -880,8 +837,7 @@ MSG_PROCESS_RETURN tls_process_finished(SSL *s, PACKET *pkt)
* Copy the finished so we can use it for renegotiation checks * Copy the finished so we can use it for renegotiation checks
*/ */
if (!ossl_assert(md_len <= EVP_MAX_MD_SIZE)) { if (!ossl_assert(md_len <= EVP_MAX_MD_SIZE)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_FINISHED, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return MSG_PROCESS_ERROR; return MSG_PROCESS_ERROR;
} }
if (s->server) { if (s->server) {
@ -933,8 +889,7 @@ MSG_PROCESS_RETURN tls_process_finished(SSL *s, PACKET *pkt)
int tls_construct_change_cipher_spec(SSL *s, WPACKET *pkt) int tls_construct_change_cipher_spec(SSL *s, WPACKET *pkt)
{ {
if (!WPACKET_put_bytes_u8(pkt, SSL3_MT_CCS)) { if (!WPACKET_put_bytes_u8(pkt, SSL3_MT_CCS)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_TLS_CONSTRUCT_CHANGE_CIPHER_SPEC, ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -949,14 +904,12 @@ static int ssl_add_cert_to_wpacket(SSL *s, WPACKET *pkt, X509 *x, int chain)
len = i2d_X509(x, NULL); len = i2d_X509(x, NULL);
if (len < 0) { if (len < 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_TO_WPACKET, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_BUF_LIB);
ERR_R_BUF_LIB);
return 0; return 0;
} }
if (!WPACKET_sub_allocate_bytes_u24(pkt, len, &outbytes) if (!WPACKET_sub_allocate_bytes_u24(pkt, len, &outbytes)
|| i2d_X509(x, &outbytes) != len) { || i2d_X509(x, &outbytes) != len) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_TO_WPACKET, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -1004,14 +957,12 @@ static int ssl_add_cert_chain(SSL *s, WPACKET *pkt, CERT_PKEY *cpk)
s->ctx->propq); s->ctx->propq);
if (xs_ctx == NULL) { if (xs_ctx == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_CHAIN, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
return 0; return 0;
} }
if (!X509_STORE_CTX_init(xs_ctx, chain_store, x, NULL)) { if (!X509_STORE_CTX_init(xs_ctx, chain_store, x, NULL)) {
X509_STORE_CTX_free(xs_ctx); X509_STORE_CTX_free(xs_ctx);
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_CHAIN, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_X509_LIB);
ERR_R_X509_LIB);
return 0; return 0;
} }
/* /*
@ -1033,7 +984,7 @@ static int ssl_add_cert_chain(SSL *s, WPACKET *pkt, CERT_PKEY *cpk)
ERR_raise(ERR_LIB_SSL, SSL_R_CA_MD_TOO_WEAK); ERR_raise(ERR_LIB_SSL, SSL_R_CA_MD_TOO_WEAK);
#endif #endif
X509_STORE_CTX_free(xs_ctx); X509_STORE_CTX_free(xs_ctx);
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_CHAIN, i); SSLfatal(s, SSL_AD_INTERNAL_ERROR, i);
return 0; return 0;
} }
chain_count = sk_X509_num(chain); chain_count = sk_X509_num(chain);
@ -1050,7 +1001,7 @@ static int ssl_add_cert_chain(SSL *s, WPACKET *pkt, CERT_PKEY *cpk)
} else { } else {
i = ssl_security_cert_chain(s, extra_certs, x, 0); i = ssl_security_cert_chain(s, extra_certs, x, 0);
if (i != 1) { if (i != 1) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_ADD_CERT_CHAIN, i); SSLfatal(s, SSL_AD_INTERNAL_ERROR, i);
return 0; return 0;
} }
if (!ssl_add_cert_to_wpacket(s, pkt, x, 0)) { if (!ssl_add_cert_to_wpacket(s, pkt, x, 0)) {
@ -1071,8 +1022,7 @@ static int ssl_add_cert_chain(SSL *s, WPACKET *pkt, CERT_PKEY *cpk)
unsigned long ssl3_output_cert_chain(SSL *s, WPACKET *pkt, CERT_PKEY *cpk) unsigned long ssl3_output_cert_chain(SSL *s, WPACKET *pkt, CERT_PKEY *cpk)
{ {
if (!WPACKET_start_sub_packet_u24(pkt)) { if (!WPACKET_start_sub_packet_u24(pkt)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_OUTPUT_CERT_CHAIN, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -1080,8 +1030,7 @@ unsigned long ssl3_output_cert_chain(SSL *s, WPACKET *pkt, CERT_PKEY *cpk)
return 0; return 0;
if (!WPACKET_close(pkt)) { if (!WPACKET_close(pkt)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_OUTPUT_CERT_CHAIN, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -1119,8 +1068,7 @@ WORK_STATE tls_finish_handshake(SSL *s, WORK_STATE wst, int clearbufs, int stop)
} }
if (!ssl_free_wbio_buffer(s)) { if (!ssl_free_wbio_buffer(s)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_FINISH_HANDSHAKE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return WORK_ERROR; return WORK_ERROR;
} }
s->init_num = 0; s->init_num = 0;
@ -1236,7 +1184,6 @@ int tls_get_message_header(SSL *s, int *mt)
*/ */
if (s->init_num != 0 || readbytes != 1 || p[0] != SSL3_MT_CCS) { if (s->init_num != 0 || readbytes != 1 || p[0] != SSL3_MT_CCS) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
SSL_F_TLS_GET_MESSAGE_HEADER,
SSL_R_BAD_CHANGE_CIPHER_SPEC); SSL_R_BAD_CHANGE_CIPHER_SPEC);
return 0; return 0;
} }
@ -1258,7 +1205,6 @@ int tls_get_message_header(SSL *s, int *mt)
return 1; return 1;
} else if (recvd_type != SSL3_RT_HANDSHAKE) { } else if (recvd_type != SSL3_RT_HANDSHAKE) {
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
SSL_F_TLS_GET_MESSAGE_HEADER,
SSL_R_CCS_RECEIVED_EARLY); SSL_R_CCS_RECEIVED_EARLY);
return 0; return 0;
} }
@ -1308,7 +1254,7 @@ int tls_get_message_header(SSL *s, int *mt)
n2l3(p, l); n2l3(p, l);
/* BUF_MEM_grow takes an 'int' parameter */ /* BUF_MEM_grow takes an 'int' parameter */
if (l > (INT_MAX - SSL3_HM_HEADER_LENGTH)) { if (l > (INT_MAX - SSL3_HM_HEADER_LENGTH)) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_GET_MESSAGE_HEADER, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
SSL_R_EXCESSIVE_MESSAGE_SIZE); SSL_R_EXCESSIVE_MESSAGE_SIZE);
return 0; return 0;
} }
@ -1964,8 +1910,7 @@ int ssl_choose_client_version(SSL *s, int version, RAW_EXTENSION *extensions)
if (s->hello_retry_request != SSL_HRR_NONE if (s->hello_retry_request != SSL_HRR_NONE
&& s->version != TLS1_3_VERSION) { && s->version != TLS1_3_VERSION) {
s->version = origv; s->version = origv;
SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSL_F_SSL_CHOOSE_CLIENT_VERSION, SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSL_R_WRONG_SSL_VERSION);
SSL_R_WRONG_SSL_VERSION);
return 0; return 0;
} }
@ -1973,9 +1918,7 @@ int ssl_choose_client_version(SSL *s, int version, RAW_EXTENSION *extensions)
default: default:
if (s->version != s->method->version) { if (s->version != s->method->version) {
s->version = origv; s->version = origv;
SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSL_R_WRONG_SSL_VERSION);
SSL_F_SSL_CHOOSE_CLIENT_VERSION,
SSL_R_WRONG_SSL_VERSION);
return 0; return 0;
} }
/* /*
@ -1997,21 +1940,18 @@ int ssl_choose_client_version(SSL *s, int version, RAW_EXTENSION *extensions)
ret = ssl_get_min_max_version(s, &ver_min, &ver_max, &real_max); ret = ssl_get_min_max_version(s, &ver_min, &ver_max, &real_max);
if (ret != 0) { if (ret != 0) {
s->version = origv; s->version = origv;
SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSLfatal(s, SSL_AD_PROTOCOL_VERSION, ret);
SSL_F_SSL_CHOOSE_CLIENT_VERSION, ret);
return 0; return 0;
} }
if (SSL_IS_DTLS(s) ? DTLS_VERSION_LT(s->version, ver_min) if (SSL_IS_DTLS(s) ? DTLS_VERSION_LT(s->version, ver_min)
: s->version < ver_min) { : s->version < ver_min) {
s->version = origv; s->version = origv;
SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSL_R_UNSUPPORTED_PROTOCOL);
SSL_F_SSL_CHOOSE_CLIENT_VERSION, SSL_R_UNSUPPORTED_PROTOCOL);
return 0; return 0;
} else if (SSL_IS_DTLS(s) ? DTLS_VERSION_GT(s->version, ver_max) } else if (SSL_IS_DTLS(s) ? DTLS_VERSION_GT(s->version, ver_max)
: s->version > ver_max) { : s->version > ver_max) {
s->version = origv; s->version = origv;
SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSL_R_UNSUPPORTED_PROTOCOL);
SSL_F_SSL_CHOOSE_CLIENT_VERSION, SSL_R_UNSUPPORTED_PROTOCOL);
return 0; return 0;
} }
@ -2026,7 +1966,6 @@ int ssl_choose_client_version(SSL *s, int version, RAW_EXTENSION *extensions)
sizeof(tls12downgrade)) == 0) { sizeof(tls12downgrade)) == 0) {
s->version = origv; s->version = origv;
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
SSL_F_SSL_CHOOSE_CLIENT_VERSION,
SSL_R_INAPPROPRIATE_FALLBACK); SSL_R_INAPPROPRIATE_FALLBACK);
return 0; return 0;
} }
@ -2039,7 +1978,6 @@ int ssl_choose_client_version(SSL *s, int version, RAW_EXTENSION *extensions)
sizeof(tls11downgrade)) == 0) { sizeof(tls11downgrade)) == 0) {
s->version = origv; s->version = origv;
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
SSL_F_SSL_CHOOSE_CLIENT_VERSION,
SSL_R_INAPPROPRIATE_FALLBACK); SSL_R_INAPPROPRIATE_FALLBACK);
return 0; return 0;
} }
@ -2054,8 +1992,7 @@ int ssl_choose_client_version(SSL *s, int version, RAW_EXTENSION *extensions)
} }
s->version = origv; s->version = origv;
SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSL_F_SSL_CHOOSE_CLIENT_VERSION, SSLfatal(s, SSL_AD_PROTOCOL_VERSION, SSL_R_UNSUPPORTED_PROTOCOL);
SSL_R_UNSUPPORTED_PROTOCOL);
return 0; return 0;
} }
@ -2307,14 +2244,12 @@ int parse_ca_names(SSL *s, PACKET *pkt)
PACKET cadns; PACKET cadns;
if (ca_sk == NULL) { if (ca_sk == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_PARSE_CA_NAMES, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
/* get the CA RDNs */ /* get the CA RDNs */
if (!PACKET_get_length_prefixed_2(pkt, &cadns)) { if (!PACKET_get_length_prefixed_2(pkt, &cadns)) {
SSLfatal(s, SSL_AD_DECODE_ERROR,SSL_F_PARSE_CA_NAMES, SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
SSL_R_LENGTH_MISMATCH);
goto err; goto err;
} }
@ -2324,26 +2259,22 @@ int parse_ca_names(SSL *s, PACKET *pkt)
if (!PACKET_get_net_2(&cadns, &name_len) if (!PACKET_get_net_2(&cadns, &name_len)
|| !PACKET_get_bytes(&cadns, &namebytes, name_len)) { || !PACKET_get_bytes(&cadns, &namebytes, name_len)) {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_PARSE_CA_NAMES, SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_LENGTH_MISMATCH);
SSL_R_LENGTH_MISMATCH);
goto err; goto err;
} }
namestart = namebytes; namestart = namebytes;
if ((xn = d2i_X509_NAME(NULL, &namebytes, name_len)) == NULL) { if ((xn = d2i_X509_NAME(NULL, &namebytes, name_len)) == NULL) {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_PARSE_CA_NAMES, SSLfatal(s, SSL_AD_DECODE_ERROR, ERR_R_ASN1_LIB);
ERR_R_ASN1_LIB);
goto err; goto err;
} }
if (namebytes != (namestart + name_len)) { if (namebytes != (namestart + name_len)) {
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_PARSE_CA_NAMES, SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_R_CA_DN_LENGTH_MISMATCH);
SSL_R_CA_DN_LENGTH_MISMATCH);
goto err; goto err;
} }
if (!sk_X509_NAME_push(ca_sk, xn)) { if (!sk_X509_NAME_push(ca_sk, xn)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_PARSE_CA_NAMES, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
xn = NULL; xn = NULL;
@ -2380,8 +2311,7 @@ int construct_ca_names(SSL *s, const STACK_OF(X509_NAME) *ca_sk, WPACKET *pkt)
{ {
/* Start sub-packet for client CA list */ /* Start sub-packet for client CA list */
if (!WPACKET_start_sub_packet_u16(pkt)) { if (!WPACKET_start_sub_packet_u16(pkt)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CONSTRUCT_CA_NAMES, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -2398,16 +2328,14 @@ int construct_ca_names(SSL *s, const STACK_OF(X509_NAME) *ca_sk, WPACKET *pkt)
|| !WPACKET_sub_allocate_bytes_u16(pkt, namelen, || !WPACKET_sub_allocate_bytes_u16(pkt, namelen,
&namebytes) &namebytes)
|| i2d_X509_NAME(name, &namebytes) != namelen) { || i2d_X509_NAME(name, &namebytes) != namelen) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CONSTRUCT_CA_NAMES, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
} }
} }
if (!WPACKET_close(pkt)) { if (!WPACKET_close(pkt)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CONSTRUCT_CA_NAMES, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -2422,8 +2350,7 @@ size_t construct_key_exchange_tbs(SSL *s, unsigned char **ptbs,
unsigned char *tbs = OPENSSL_malloc(tbslen); unsigned char *tbs = OPENSSL_malloc(tbslen);
if (tbs == NULL) { if (tbs == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CONSTRUCT_KEY_EXCHANGE_TBS, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
return 0; return 0;
} }
memcpy(tbs, s->s3.client_random, SSL3_RANDOM_SIZE); memcpy(tbs, s->s3.client_random, SSL3_RANDOM_SIZE);
@ -2448,16 +2375,12 @@ int tls13_save_handshake_digest_for_pha(SSL *s)
s->pha_dgst = EVP_MD_CTX_new(); s->pha_dgst = EVP_MD_CTX_new();
if (s->pha_dgst == NULL) { if (s->pha_dgst == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA,
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
if (!EVP_MD_CTX_copy_ex(s->pha_dgst, if (!EVP_MD_CTX_copy_ex(s->pha_dgst,
s->s3.handshake_dgst)) { s->s3.handshake_dgst)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA,
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
} }
@ -2471,16 +2394,12 @@ int tls13_save_handshake_digest_for_pha(SSL *s)
int tls13_restore_handshake_digest_for_pha(SSL *s) int tls13_restore_handshake_digest_for_pha(SSL *s)
{ {
if (s->pha_dgst == NULL) { if (s->pha_dgst == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA,
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
if (!EVP_MD_CTX_copy_ex(s->s3.handshake_dgst, if (!EVP_MD_CTX_copy_ex(s->s3.handshake_dgst,
s->pha_dgst)) { s->pha_dgst)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA,
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
return 1; return 1;

File diff suppressed because it is too large Load Diff

View File

@ -40,8 +40,7 @@ static int tls1_PRF(SSL *s,
if (md == NULL) { if (md == NULL) {
/* Should never happen */ /* Should never happen */
if (fatal) if (fatal)
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_PRF, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
else else
ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR); ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR);
return 0; return 0;
@ -78,8 +77,7 @@ static int tls1_PRF(SSL *s,
err: err:
if (fatal) if (fatal)
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_PRF, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
else else
ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR); ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR);
EVP_KDF_CTX_free(kctx); EVP_KDF_CTX_free(kctx);
@ -167,8 +165,7 @@ int tls_provider_set_tls_params(SSL *s, EVP_CIPHER_CTX *ctx,
*pprm = OSSL_PARAM_construct_end(); *pprm = OSSL_PARAM_construct_end();
if (!EVP_CIPHER_CTX_set_params(ctx, params)) { if (!EVP_CIPHER_CTX_set_params(ctx, params)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
@ -240,8 +237,7 @@ int tls1_change_cipher_state(SSL *s, int which)
if (s->enc_read_ctx != NULL) { if (s->enc_read_ctx != NULL) {
reuse_dd = 1; reuse_dd = 1;
} else if ((s->enc_read_ctx = EVP_CIPHER_CTX_new()) == NULL) { } else if ((s->enc_read_ctx = EVP_CIPHER_CTX_new()) == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
goto err; goto err;
} else { } else {
/* /*
@ -252,8 +248,7 @@ int tls1_change_cipher_state(SSL *s, int which)
dd = s->enc_read_ctx; dd = s->enc_read_ctx;
mac_ctx = ssl_replace_hash(&s->read_hash, NULL); mac_ctx = ssl_replace_hash(&s->read_hash, NULL);
if (mac_ctx == NULL) { if (mac_ctx == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
#ifndef OPENSSL_NO_COMP #ifndef OPENSSL_NO_COMP
@ -263,7 +258,6 @@ int tls1_change_cipher_state(SSL *s, int which)
s->expand = COMP_CTX_new(comp->method); s->expand = COMP_CTX_new(comp->method);
if (s->expand == NULL) { if (s->expand == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR,
SSL_F_TLS1_CHANGE_CIPHER_STATE,
SSL_R_COMPRESSION_LIBRARY_ERROR); SSL_R_COMPRESSION_LIBRARY_ERROR);
goto err; goto err;
} }
@ -295,26 +289,21 @@ int tls1_change_cipher_state(SSL *s, int which)
if (s->enc_write_ctx != NULL && !SSL_IS_DTLS(s)) { if (s->enc_write_ctx != NULL && !SSL_IS_DTLS(s)) {
reuse_dd = 1; reuse_dd = 1;
} else if ((s->enc_write_ctx = EVP_CIPHER_CTX_new()) == NULL) { } else if ((s->enc_write_ctx = EVP_CIPHER_CTX_new()) == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
dd = s->enc_write_ctx; dd = s->enc_write_ctx;
if (SSL_IS_DTLS(s)) { if (SSL_IS_DTLS(s)) {
mac_ctx = EVP_MD_CTX_new(); mac_ctx = EVP_MD_CTX_new();
if (mac_ctx == NULL) { if (mac_ctx == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
SSL_F_TLS1_CHANGE_CIPHER_STATE,
ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
s->write_hash = mac_ctx; s->write_hash = mac_ctx;
} else { } else {
mac_ctx = ssl_replace_hash(&s->write_hash, NULL); mac_ctx = ssl_replace_hash(&s->write_hash, NULL);
if (mac_ctx == NULL) { if (mac_ctx == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
SSL_F_TLS1_CHANGE_CIPHER_STATE,
ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
} }
@ -325,8 +314,7 @@ int tls1_change_cipher_state(SSL *s, int which)
s->compress = COMP_CTX_new(comp->method); s->compress = COMP_CTX_new(comp->method);
if (s->compress == NULL) { if (s->compress == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR,
SSL_F_TLS1_CHANGE_CIPHER_STATE, SSL_R_COMPRESSION_LIBRARY_ERROR);
SSL_R_COMPRESSION_LIBRARY_ERROR);
goto err; goto err;
} }
} }
@ -369,8 +357,7 @@ int tls1_change_cipher_state(SSL *s, int which)
} }
if (n > s->s3.tmp.key_block_length) { if (n > s->s3.tmp.key_block_length) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -394,8 +381,7 @@ int tls1_change_cipher_state(SSL *s, int which)
|| EVP_DigestSignInit_ex(mac_ctx, NULL, EVP_MD_name(m), || EVP_DigestSignInit_ex(mac_ctx, NULL, EVP_MD_name(m),
s->ctx->libctx, s->ctx->propq, mac_key) <= 0) { s->ctx->libctx, s->ctx->propq, mac_key) <= 0) {
EVP_PKEY_free(mac_key); EVP_PKEY_free(mac_key);
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
EVP_PKEY_free(mac_key); EVP_PKEY_free(mac_key);
@ -410,8 +396,7 @@ int tls1_change_cipher_state(SSL *s, int which)
if (!EVP_CipherInit_ex(dd, c, NULL, key, NULL, (which & SSL3_CC_WRITE)) if (!EVP_CipherInit_ex(dd, c, NULL, key, NULL, (which & SSL3_CC_WRITE))
|| !EVP_CIPHER_CTX_ctrl(dd, EVP_CTRL_GCM_SET_IV_FIXED, (int)k, || !EVP_CIPHER_CTX_ctrl(dd, EVP_CTRL_GCM_SET_IV_FIXED, (int)k,
iv)) { iv)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
} else if (EVP_CIPHER_mode(c) == EVP_CIPH_CCM_MODE) { } else if (EVP_CIPHER_mode(c) == EVP_CIPH_CCM_MODE) {
@ -426,14 +411,12 @@ int tls1_change_cipher_state(SSL *s, int which)
|| !EVP_CIPHER_CTX_ctrl(dd, EVP_CTRL_AEAD_SET_TAG, taglen, NULL) || !EVP_CIPHER_CTX_ctrl(dd, EVP_CTRL_AEAD_SET_TAG, taglen, NULL)
|| !EVP_CIPHER_CTX_ctrl(dd, EVP_CTRL_CCM_SET_IV_FIXED, (int)k, iv) || !EVP_CIPHER_CTX_ctrl(dd, EVP_CTRL_CCM_SET_IV_FIXED, (int)k, iv)
|| !EVP_CipherInit_ex(dd, NULL, NULL, key, NULL, -1)) { || !EVP_CipherInit_ex(dd, NULL, NULL, key, NULL, -1)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
} else { } else {
if (!EVP_CipherInit_ex(dd, c, NULL, key, iv, (which & SSL3_CC_WRITE))) { if (!EVP_CipherInit_ex(dd, c, NULL, key, iv, (which & SSL3_CC_WRITE))) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
} }
@ -441,8 +424,7 @@ int tls1_change_cipher_state(SSL *s, int which)
if ((EVP_CIPHER_flags(c) & EVP_CIPH_FLAG_AEAD_CIPHER) && *mac_secret_size if ((EVP_CIPHER_flags(c) & EVP_CIPH_FLAG_AEAD_CIPHER) && *mac_secret_size
&& !EVP_CIPHER_CTX_ctrl(dd, EVP_CTRL_AEAD_SET_MAC_KEY, && !EVP_CIPHER_CTX_ctrl(dd, EVP_CTRL_AEAD_SET_MAC_KEY,
(int)*mac_secret_size, mac_secret)) { (int)*mac_secret_size, mac_secret)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
if (EVP_CIPHER_provider(c) != NULL if (EVP_CIPHER_provider(c) != NULL
@ -473,8 +455,7 @@ int tls1_change_cipher_state(SSL *s, int which)
bio = s->rbio; bio = s->rbio;
if (!ossl_assert(bio != NULL)) { if (!ossl_assert(bio != NULL)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -487,8 +468,7 @@ int tls1_change_cipher_state(SSL *s, int which)
/* ktls doesn't support renegotiation */ /* ktls doesn't support renegotiation */
if ((BIO_get_ktls_send(s->wbio) && (which & SSL3_CC_WRITE)) || if ((BIO_get_ktls_send(s->wbio) && (which & SSL3_CC_WRITE)) ||
(BIO_get_ktls_recv(s->rbio) && (which & SSL3_CC_READ))) { (BIO_get_ktls_recv(s->rbio) && (which & SSL3_CC_READ))) {
SSLfatal(s, SSL_AD_NO_RENEGOTIATION, SSL_F_TLS1_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_NO_RENEGOTIATION, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -559,8 +539,7 @@ int tls1_setup_key_block(SSL *s)
if (!ssl_cipher_get_evp(s->ctx, s->session, &c, &hash, &mac_type, if (!ssl_cipher_get_evp(s->ctx, s->session, &c, &hash, &mac_type,
&mac_secret_size, &comp, s->ext.use_etm)) { &mac_secret_size, &comp, s->ext.use_etm)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_SETUP_KEY_BLOCK, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_CIPHER_OR_HASH_UNAVAILABLE);
SSL_R_CIPHER_OR_HASH_UNAVAILABLE);
return 0; return 0;
} }
@ -576,8 +555,7 @@ int tls1_setup_key_block(SSL *s)
ssl3_cleanup_key_block(s); ssl3_cleanup_key_block(s);
if ((p = OPENSSL_malloc(num)) == NULL) { if ((p = OPENSSL_malloc(num)) == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS1_SETUP_KEY_BLOCK, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }

View File

@ -1466,8 +1466,7 @@ int tls12_check_peer_sigalg(SSL *s, uint16_t sig, EVP_PKEY *pkey)
if (SSL_IS_TLS13(s)) { if (SSL_IS_TLS13(s)) {
/* Disallow DSA for TLS 1.3 */ /* Disallow DSA for TLS 1.3 */
if (pkeyid == EVP_PKEY_DSA) { if (pkeyid == EVP_PKEY_DSA) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS12_CHECK_PEER_SIGALG, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_WRONG_SIGNATURE_TYPE);
SSL_R_WRONG_SIGNATURE_TYPE);
return 0; return 0;
} }
/* Only allow PSS for TLS 1.3 */ /* Only allow PSS for TLS 1.3 */
@ -1483,15 +1482,13 @@ int tls12_check_peer_sigalg(SSL *s, uint16_t sig, EVP_PKEY *pkey)
|| (SSL_IS_TLS13(s) && (lu->hash == NID_sha1 || lu->hash == NID_sha224)) || (SSL_IS_TLS13(s) && (lu->hash == NID_sha1 || lu->hash == NID_sha224))
|| (pkeyid != lu->sig || (pkeyid != lu->sig
&& (lu->sig != EVP_PKEY_RSA_PSS || pkeyid != EVP_PKEY_RSA))) { && (lu->sig != EVP_PKEY_RSA_PSS || pkeyid != EVP_PKEY_RSA))) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS12_CHECK_PEER_SIGALG, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_WRONG_SIGNATURE_TYPE);
SSL_R_WRONG_SIGNATURE_TYPE);
return 0; return 0;
} }
/* Check the sigalg is consistent with the key OID */ /* Check the sigalg is consistent with the key OID */
if (!ssl_cert_lookup_by_nid(EVP_PKEY_id(pkey), &cidx) if (!ssl_cert_lookup_by_nid(EVP_PKEY_id(pkey), &cidx)
|| lu->sig_idx != (int)cidx) { || lu->sig_idx != (int)cidx) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS12_CHECK_PEER_SIGALG, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_WRONG_SIGNATURE_TYPE);
SSL_R_WRONG_SIGNATURE_TYPE);
return 0; return 0;
} }
@ -1501,7 +1498,6 @@ int tls12_check_peer_sigalg(SSL *s, uint16_t sig, EVP_PKEY *pkey)
/* Check point compression is permitted */ /* Check point compression is permitted */
if (!tls1_check_pkey_comp(s, pkey)) { if (!tls1_check_pkey_comp(s, pkey)) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
SSL_F_TLS12_CHECK_PEER_SIGALG,
SSL_R_ILLEGAL_POINT_COMPRESSION); SSL_R_ILLEGAL_POINT_COMPRESSION);
return 0; return 0;
} }
@ -1511,16 +1507,14 @@ int tls12_check_peer_sigalg(SSL *s, uint16_t sig, EVP_PKEY *pkey)
int curve = evp_pkey_get_EC_KEY_curve_nid(pkey); int curve = evp_pkey_get_EC_KEY_curve_nid(pkey);
if (lu->curve != NID_undef && curve != lu->curve) { if (lu->curve != NID_undef && curve != lu->curve) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_WRONG_CURVE);
SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_WRONG_CURVE);
return 0; return 0;
} }
} }
if (!SSL_IS_TLS13(s)) { if (!SSL_IS_TLS13(s)) {
/* Check curve matches extensions */ /* Check curve matches extensions */
if (!tls1_check_group_id(s, tls1_get_group_id(pkey), 1)) { if (!tls1_check_group_id(s, tls1_get_group_id(pkey), 1)) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_WRONG_CURVE);
SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_WRONG_CURVE);
return 0; return 0;
} }
if (tls1_suiteb(s)) { if (tls1_suiteb(s)) {
@ -1528,15 +1522,13 @@ int tls12_check_peer_sigalg(SSL *s, uint16_t sig, EVP_PKEY *pkey)
if (sig != TLSEXT_SIGALG_ecdsa_secp256r1_sha256 if (sig != TLSEXT_SIGALG_ecdsa_secp256r1_sha256
&& sig != TLSEXT_SIGALG_ecdsa_secp384r1_sha384) { && sig != TLSEXT_SIGALG_ecdsa_secp384r1_sha384) {
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
SSL_F_TLS12_CHECK_PEER_SIGALG,
SSL_R_WRONG_SIGNATURE_TYPE); SSL_R_WRONG_SIGNATURE_TYPE);
return 0; return 0;
} }
} }
} }
} else if (tls1_suiteb(s)) { } else if (tls1_suiteb(s)) {
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS12_CHECK_PEER_SIGALG, SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_WRONG_SIGNATURE_TYPE);
SSL_R_WRONG_SIGNATURE_TYPE);
return 0; return 0;
} }
#endif #endif
@ -1550,13 +1542,11 @@ int tls12_check_peer_sigalg(SSL *s, uint16_t sig, EVP_PKEY *pkey)
/* Allow fallback to SHA1 if not strict mode */ /* Allow fallback to SHA1 if not strict mode */
if (i == sent_sigslen && (lu->hash != NID_sha1 if (i == sent_sigslen && (lu->hash != NID_sha1
|| s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)) { || s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)) {
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS12_CHECK_PEER_SIGALG, SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_WRONG_SIGNATURE_TYPE);
SSL_R_WRONG_SIGNATURE_TYPE);
return 0; return 0;
} }
if (!tls1_lookup_md(s->ctx, lu, &md)) { if (!tls1_lookup_md(s->ctx, lu, &md)) {
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS12_CHECK_PEER_SIGALG, SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_UNKNOWN_DIGEST);
SSL_R_UNKNOWN_DIGEST);
return 0; return 0;
} }
/* /*
@ -1570,8 +1560,7 @@ int tls12_check_peer_sigalg(SSL *s, uint16_t sig, EVP_PKEY *pkey)
!ssl_security(s, SSL_SECOP_SIGALG_CHECK, secbits, !ssl_security(s, SSL_SECOP_SIGALG_CHECK, secbits,
md != NULL ? EVP_MD_type(md) : NID_undef, md != NULL ? EVP_MD_type(md) : NID_undef,
(void *)sigalgstr)) { (void *)sigalgstr)) {
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS12_CHECK_PEER_SIGALG, SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_WRONG_SIGNATURE_TYPE);
SSL_R_WRONG_SIGNATURE_TYPE);
return 0; return 0;
} }
/* Store the sigalg the peer uses */ /* Store the sigalg the peer uses */
@ -1711,15 +1700,14 @@ int tls1_set_server_sigalgs(SSL *s)
} }
if (!tls1_process_sigalgs(s)) { if (!tls1_process_sigalgs(s)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_TLS1_SET_SERVER_SIGALGS, ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
if (s->shared_sigalgs != NULL) if (s->shared_sigalgs != NULL)
return 1; return 1;
/* Fatal error if no shared signature algorithms */ /* Fatal error if no shared signature algorithms */
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS1_SET_SERVER_SIGALGS, SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS); SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS);
return 0; return 0;
} }
@ -3207,7 +3195,7 @@ int tls_choose_sigalg(SSL *s, int fatalerrs)
if (lu == NULL) { if (lu == NULL) {
if (!fatalerrs) if (!fatalerrs)
return 1; return 1;
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS_CHOOSE_SIGALG, SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM); SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM);
return 0; return 0;
} }
@ -3274,7 +3262,6 @@ int tls_choose_sigalg(SSL *s, int fatalerrs)
if (!fatalerrs) if (!fatalerrs)
return 1; return 1;
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
SSL_F_TLS_CHOOSE_SIGALG,
SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM); SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM);
return 0; return 0;
} else { } else {
@ -3287,7 +3274,6 @@ int tls_choose_sigalg(SSL *s, int fatalerrs)
if (!fatalerrs) if (!fatalerrs)
return 1; return 1;
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
SSL_F_TLS_CHOOSE_SIGALG,
SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM); SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM);
return 0; return 0;
} }
@ -3301,7 +3287,7 @@ int tls_choose_sigalg(SSL *s, int fatalerrs)
if ((lu = tls1_get_legacy_sigalg(s, -1)) == NULL) { if ((lu = tls1_get_legacy_sigalg(s, -1)) == NULL) {
if (!fatalerrs) if (!fatalerrs)
return 1; return 1;
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CHOOSE_SIGALG, SSLfatal(s, SSL_AD_INTERNAL_ERROR,
SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM); SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM);
return 0; return 0;
} }
@ -3317,7 +3303,6 @@ int tls_choose_sigalg(SSL *s, int fatalerrs)
if (!fatalerrs) if (!fatalerrs)
return 1; return 1;
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
SSL_F_TLS_CHOOSE_SIGALG,
SSL_R_WRONG_SIGNATURE_TYPE); SSL_R_WRONG_SIGNATURE_TYPE);
return 0; return 0;
} }
@ -3326,7 +3311,7 @@ int tls_choose_sigalg(SSL *s, int fatalerrs)
if ((lu = tls1_get_legacy_sigalg(s, -1)) == NULL) { if ((lu = tls1_get_legacy_sigalg(s, -1)) == NULL) {
if (!fatalerrs) if (!fatalerrs)
return 1; return 1;
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CHOOSE_SIGALG, SSLfatal(s, SSL_AD_INTERNAL_ERROR,
SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM); SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM);
return 0; return 0;
} }

View File

@ -64,8 +64,7 @@ int tls13_hkdf_expand(SSL *s, const EVP_MD *md, const unsigned char *secret,
if (labellen > TLS13_MAX_LABEL_LEN) { if (labellen > TLS13_MAX_LABEL_LEN) {
if (fatal) { if (fatal) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_HKDF_EXPAND, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
} else { } else {
/* /*
* Probably we have been called from SSL_export_keying_material(), * Probably we have been called from SSL_export_keying_material(),
@ -91,8 +90,7 @@ int tls13_hkdf_expand(SSL *s, const EVP_MD *md, const unsigned char *secret,
EVP_KDF_CTX_free(kctx); EVP_KDF_CTX_free(kctx);
WPACKET_cleanup(&pkt); WPACKET_cleanup(&pkt);
if (fatal) if (fatal)
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_HKDF_EXPAND, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
else else
ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR); ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR);
return 0; return 0;
@ -114,8 +112,7 @@ int tls13_hkdf_expand(SSL *s, const EVP_MD *md, const unsigned char *secret,
if (ret != 0) { if (ret != 0) {
if (fatal) if (fatal)
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_HKDF_EXPAND, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
else else
ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR); ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR);
} }
@ -201,16 +198,14 @@ int tls13_generate_secret(SSL *s, const EVP_MD *md,
kctx = EVP_KDF_CTX_new(kdf); kctx = EVP_KDF_CTX_new(kdf);
EVP_KDF_free(kdf); EVP_KDF_free(kdf);
if (kctx == NULL) { if (kctx == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_GENERATE_SECRET, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
return 0; return 0;
} }
mdleni = EVP_MD_size(md); mdleni = EVP_MD_size(md);
/* Ensure cast to size_t is safe */ /* Ensure cast to size_t is safe */
if (!ossl_assert(mdleni >= 0)) { if (!ossl_assert(mdleni >= 0)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_GENERATE_SECRET, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
EVP_KDF_CTX_free(kctx); EVP_KDF_CTX_free(kctx);
return 0; return 0;
} }
@ -231,8 +226,7 @@ int tls13_generate_secret(SSL *s, const EVP_MD *md,
if (mctx == NULL if (mctx == NULL
|| EVP_DigestInit_ex(mctx, md, NULL) <= 0 || EVP_DigestInit_ex(mctx, md, NULL) <= 0
|| EVP_DigestFinal_ex(mctx, hash, NULL) <= 0) { || EVP_DigestFinal_ex(mctx, hash, NULL) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_GENERATE_SECRET, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
EVP_MD_CTX_free(mctx); EVP_MD_CTX_free(mctx);
EVP_KDF_CTX_free(kctx); EVP_KDF_CTX_free(kctx);
return 0; return 0;
@ -268,8 +262,7 @@ int tls13_generate_secret(SSL *s, const EVP_MD *md,
|| EVP_KDF_derive(kctx, outsecret, mdlen) <= 0; || EVP_KDF_derive(kctx, outsecret, mdlen) <= 0;
if (ret != 0) if (ret != 0)
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_GENERATE_SECRET, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
EVP_KDF_CTX_free(kctx); EVP_KDF_CTX_free(kctx);
if (prevsecret == preextractsec) if (prevsecret == preextractsec)
@ -323,8 +316,7 @@ size_t tls13_final_finish_mac(SSL *s, const char *str, size_t slen,
OSSL_PARAM params[4], *p = params; OSSL_PARAM params[4], *p = params;
if (hmac == NULL) { if (hmac == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_FINAL_FINISH_MAC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -367,8 +359,7 @@ size_t tls13_final_finish_mac(SSL *s, const char *str, size_t slen,
|| !EVP_MAC_update(ctx, hash, hashlen) || !EVP_MAC_update(ctx, hash, hashlen)
/* outsize as per sizeof(peer_finish_md) */ /* outsize as per sizeof(peer_finish_md) */
|| !EVP_MAC_final(ctx, out, &hashlen, EVP_MAX_MD_SIZE * 2)) { || !EVP_MAC_final(ctx, out, &hashlen, EVP_MAX_MD_SIZE * 2)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_FINAL_FINISH_MAC, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -392,8 +383,7 @@ int tls13_setup_key_block(SSL *s)
s->session->cipher = s->s3.tmp.new_cipher; s->session->cipher = s->s3.tmp.new_cipher;
if (!ssl_cipher_get_evp(s->ctx, s->session, &c, &hash, NULL, NULL, NULL, if (!ssl_cipher_get_evp(s->ctx, s->session, &c, &hash, NULL, NULL, NULL,
0)) { 0)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_SETUP_KEY_BLOCK, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_CIPHER_OR_HASH_UNAVAILABLE);
SSL_R_CIPHER_OR_HASH_UNAVAILABLE);
return 0; return 0;
} }
@ -420,8 +410,7 @@ static int derive_secret_key_and_iv(SSL *s, int sending, const EVP_MD *md,
/* Ensure cast to size_t is safe */ /* Ensure cast to size_t is safe */
if (!ossl_assert(hashleni >= 0)) { if (!ossl_assert(hashleni >= 0)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DERIVE_SECRET_KEY_AND_IV, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
ERR_R_EVP_LIB);
return 0; return 0;
} }
hashlen = (size_t)hashleni; hashlen = (size_t)hashleni;
@ -447,8 +436,7 @@ static int derive_secret_key_and_iv(SSL *s, int sending, const EVP_MD *md,
/* We must be doing early data with out-of-band PSK */ /* We must be doing early data with out-of-band PSK */
algenc = s->psksession->cipher->algorithm_enc; algenc = s->psksession->cipher->algorithm_enc;
} else { } else {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DERIVE_SECRET_KEY_AND_IV, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
ERR_R_EVP_LIB);
return 0; return 0;
} }
if (algenc & (SSL_AES128CCM8 | SSL_AES256CCM8)) if (algenc & (SSL_AES128CCM8 | SSL_AES256CCM8))
@ -471,8 +459,7 @@ static int derive_secret_key_and_iv(SSL *s, int sending, const EVP_MD *md,
|| (taglen != 0 && !EVP_CIPHER_CTX_ctrl(ciph_ctx, EVP_CTRL_AEAD_SET_TAG, || (taglen != 0 && !EVP_CIPHER_CTX_ctrl(ciph_ctx, EVP_CTRL_AEAD_SET_TAG,
taglen, NULL)) taglen, NULL))
|| EVP_CipherInit_ex(ciph_ctx, NULL, NULL, key, NULL, -1) <= 0) { || EVP_CipherInit_ex(ciph_ctx, NULL, NULL, key, NULL, -1) <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DERIVE_SECRET_KEY_AND_IV, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
ERR_R_EVP_LIB);
return 0; return 0;
} }
@ -526,8 +513,7 @@ int tls13_change_cipher_state(SSL *s, int which)
} else { } else {
s->enc_read_ctx = EVP_CIPHER_CTX_new(); s->enc_read_ctx = EVP_CIPHER_CTX_new();
if (s->enc_read_ctx == NULL) { if (s->enc_read_ctx == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
SSL_F_TLS13_CHANGE_CIPHER_STATE, ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
} }
@ -542,8 +528,7 @@ int tls13_change_cipher_state(SSL *s, int which)
} else { } else {
s->enc_write_ctx = EVP_CIPHER_CTX_new(); s->enc_write_ctx = EVP_CIPHER_CTX_new();
if (s->enc_write_ctx == NULL) { if (s->enc_write_ctx == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
SSL_F_TLS13_CHANGE_CIPHER_STATE, ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
} }
@ -569,9 +554,7 @@ int tls13_change_cipher_state(SSL *s, int which)
handlen = BIO_get_mem_data(s->s3.handshake_buffer, &hdata); handlen = BIO_get_mem_data(s->s3.handshake_buffer, &hdata);
if (handlen <= 0) { if (handlen <= 0) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_BAD_HANDSHAKE_LENGTH);
SSL_F_TLS13_CHANGE_CIPHER_STATE,
SSL_R_BAD_HANDSHAKE_LENGTH);
goto err; goto err;
} }
@ -586,16 +569,13 @@ int tls13_change_cipher_state(SSL *s, int which)
if (!ossl_assert(s->psksession != NULL if (!ossl_assert(s->psksession != NULL
&& s->max_early_data == && s->max_early_data ==
s->psksession->ext.max_early_data)) { s->psksession->ext.max_early_data)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_TLS13_CHANGE_CIPHER_STATE,
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
sslcipher = SSL_SESSION_get0_cipher(s->psksession); sslcipher = SSL_SESSION_get0_cipher(s->psksession);
} }
if (sslcipher == NULL) { if (sslcipher == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_BAD_PSK);
SSL_F_TLS13_CHANGE_CIPHER_STATE, SSL_R_BAD_PSK);
goto err; goto err;
} }
@ -606,8 +586,7 @@ int tls13_change_cipher_state(SSL *s, int which)
*/ */
mdctx = EVP_MD_CTX_new(); mdctx = EVP_MD_CTX_new();
if (mdctx == NULL) { if (mdctx == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
SSL_F_TLS13_CHANGE_CIPHER_STATE, ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
@ -617,7 +596,6 @@ int tls13_change_cipher_state(SSL *s, int which)
*/ */
if (!ssl_cipher_get_evp_cipher(s->ctx, sslcipher, &cipher)) { if (!ssl_cipher_get_evp_cipher(s->ctx, sslcipher, &cipher)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR,
SSL_F_TLS13_CHANGE_CIPHER_STATE,
SSL_R_ALGORITHM_FETCH_FAILED); SSL_R_ALGORITHM_FETCH_FAILED);
EVP_MD_CTX_free(mdctx); EVP_MD_CTX_free(mdctx);
goto err; goto err;
@ -627,8 +605,7 @@ int tls13_change_cipher_state(SSL *s, int which)
if (md == NULL || !EVP_DigestInit_ex(mdctx, md, NULL) if (md == NULL || !EVP_DigestInit_ex(mdctx, md, NULL)
|| !EVP_DigestUpdate(mdctx, hdata, handlen) || !EVP_DigestUpdate(mdctx, hdata, handlen)
|| !EVP_DigestFinal_ex(mdctx, hashval, &hashlenui)) { || !EVP_DigestFinal_ex(mdctx, hashval, &hashlenui)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_TLS13_CHANGE_CIPHER_STATE, ERR_R_INTERNAL_ERROR);
EVP_MD_CTX_free(mdctx); EVP_MD_CTX_free(mdctx);
goto err; goto err;
} }
@ -641,8 +618,7 @@ int tls13_change_cipher_state(SSL *s, int which)
hashval, hashlen, hashval, hashlen,
s->early_exporter_master_secret, hashlen, s->early_exporter_master_secret, hashlen,
1)) { 1)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_TLS13_CHANGE_CIPHER_STATE, ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
@ -801,8 +777,7 @@ int tls13_change_cipher_state(SSL *s, int which)
bio = s->wbio; bio = s->wbio;
if (!ossl_assert(bio != NULL)) { if (!ossl_assert(bio != NULL)) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_CHANGE_CIPHER_STATE, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }

View File

@ -264,8 +264,7 @@ int srp_generate_server_master_secret(SSL *s)
tmp_len = BN_num_bytes(K); tmp_len = BN_num_bytes(K);
if ((tmp = OPENSSL_malloc(tmp_len)) == NULL) { if ((tmp = OPENSSL_malloc(tmp_len)) == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
SSL_F_SRP_GENERATE_SERVER_MASTER_SECRET, ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
BN_bn2bin(K, tmp); BN_bn2bin(K, tmp);
@ -293,16 +292,13 @@ int srp_generate_client_master_secret(SSL *s)
s->ctx->libctx, s->ctx->propq)) s->ctx->libctx, s->ctx->propq))
== NULL == NULL
|| s->srp_ctx.SRP_give_srp_client_pwd_callback == NULL) { || s->srp_ctx.SRP_give_srp_client_pwd_callback == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET, ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
if ((passwd = s->srp_ctx.SRP_give_srp_client_pwd_callback(s, if ((passwd = s->srp_ctx.SRP_give_srp_client_pwd_callback(s,
s->srp_ctx.SRP_cb_arg)) s->srp_ctx.SRP_cb_arg))
== NULL) { == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_R_CALLBACK_FAILED);
SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET,
SSL_R_CALLBACK_FAILED);
goto err; goto err;
} }
if ((x = SRP_Calc_x_ex(s->srp_ctx.s, s->srp_ctx.login, passwd, if ((x = SRP_Calc_x_ex(s->srp_ctx.s, s->srp_ctx.login, passwd,
@ -312,15 +308,13 @@ int srp_generate_client_master_secret(SSL *s)
s->srp_ctx.a, u, s->srp_ctx.a, u,
s->ctx->libctx, s->ctx->libctx,
s->ctx->propq)) == NULL) { s->ctx->propq)) == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET, ERR_R_INTERNAL_ERROR);
goto err; goto err;
} }
tmp_len = BN_num_bytes(K); tmp_len = BN_num_bytes(K);
if ((tmp = OPENSSL_malloc(tmp_len)) == NULL) { if ((tmp = OPENSSL_malloc(tmp_len)) == NULL) {
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_MALLOC_FAILURE);
SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET, ERR_R_MALLOC_FAILURE);
goto err; goto err;
} }
BN_bn2bin(K, tmp); BN_bn2bin(K, tmp);
@ -344,26 +338,22 @@ int srp_verify_server_param(SSL *s)
*/ */
if (BN_ucmp(srp->g, srp->N) >= 0 || BN_ucmp(srp->B, srp->N) >= 0 if (BN_ucmp(srp->g, srp->N) >= 0 || BN_ucmp(srp->B, srp->N) >= 0
|| BN_is_zero(srp->B)) { || BN_is_zero(srp->B)) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_SRP_VERIFY_SERVER_PARAM, SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_BAD_DATA);
SSL_R_BAD_DATA);
return 0; return 0;
} }
if (BN_num_bits(srp->N) < srp->strength) { if (BN_num_bits(srp->N) < srp->strength) {
SSLfatal(s, SSL_AD_INSUFFICIENT_SECURITY, SSL_F_SRP_VERIFY_SERVER_PARAM, SSLfatal(s, SSL_AD_INSUFFICIENT_SECURITY, SSL_R_INSUFFICIENT_SECURITY);
SSL_R_INSUFFICIENT_SECURITY);
return 0; return 0;
} }
if (srp->SRP_verify_param_callback) { if (srp->SRP_verify_param_callback) {
if (srp->SRP_verify_param_callback(s, srp->SRP_cb_arg) <= 0) { if (srp->SRP_verify_param_callback(s, srp->SRP_cb_arg) <= 0) {
SSLfatal(s, SSL_AD_INSUFFICIENT_SECURITY, SSLfatal(s, SSL_AD_INSUFFICIENT_SECURITY, SSL_R_CALLBACK_FAILED);
SSL_F_SRP_VERIFY_SERVER_PARAM,
SSL_R_CALLBACK_FAILED);
return 0; return 0;
} }
} else if (!SRP_check_known_gN_param(srp->g, srp->N)) { } else if (!SRP_check_known_gN_param(srp->g, srp->N)) {
SSLfatal(s, SSL_AD_INSUFFICIENT_SECURITY, SSL_F_SRP_VERIFY_SERVER_PARAM, SSLfatal(s, SSL_AD_INSUFFICIENT_SECURITY,
SSL_R_INSUFFICIENT_SECURITY); SSL_R_INSUFFICIENT_SECURITY);
return 0; return 0;
} }

View File

@ -198,8 +198,7 @@ const EVP_MD *ssl_md(SSL_CTX *ctx, int idx)
return EVP_sha256(); return EVP_sha256();
} }
void ossl_statem_fatal(SSL *s, int al, int func, int reason, const char *file, void ossl_statem_fatal(SSL *s, int al, int reason, const char *fmt, ...)
int line)
{ {
} }