summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_clnt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/ssl_clnt.c')
-rw-r--r--src/lib/libssl/ssl_clnt.c92
1 files changed, 46 insertions, 46 deletions
diff --git a/src/lib/libssl/ssl_clnt.c b/src/lib/libssl/ssl_clnt.c
index 7d55c0dd52..29d488c12c 100644
--- a/src/lib/libssl/ssl_clnt.c
+++ b/src/lib/libssl/ssl_clnt.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_clnt.c,v 1.80 2021/02/20 08:22:55 jsing Exp $ */ 1/* $OpenBSD: ssl_clnt.c,v 1.81 2021/02/20 14:03:50 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -634,7 +634,7 @@ ssl3_connect(SSL *s)
634 skip = 0; 634 skip = 0;
635 } 635 }
636 636
637end: 637 end:
638 s->internal->in_handshake--; 638 s->internal->in_handshake--;
639 if (cb != NULL) 639 if (cb != NULL)
640 cb(s, SSL_CB_CONNECT_EXIT, ret); 640 cb(s, SSL_CB_CONNECT_EXIT, ret);
@@ -779,7 +779,7 @@ ssl3_send_client_hello(SSL *s)
779 /* SSL3_ST_CW_CLNT_HELLO_B */ 779 /* SSL3_ST_CW_CLNT_HELLO_B */
780 return (ssl3_handshake_write(s)); 780 return (ssl3_handshake_write(s));
781 781
782err: 782 err:
783 CBB_cleanup(&cbb); 783 CBB_cleanup(&cbb);
784 784
785 return (-1); 785 return (-1);
@@ -806,16 +806,16 @@ ssl3_get_dtls_hello_verify(SSL *s)
806 } 806 }
807 807
808 if (n < 0) 808 if (n < 0)
809 goto truncated; 809 goto decode_err;
810 810
811 CBS_init(&hello_verify_request, s->internal->init_msg, n); 811 CBS_init(&hello_verify_request, s->internal->init_msg, n);
812 812
813 if (!CBS_get_u16(&hello_verify_request, &ssl_version)) 813 if (!CBS_get_u16(&hello_verify_request, &ssl_version))
814 goto truncated; 814 goto decode_err;
815 if (!CBS_get_u8_length_prefixed(&hello_verify_request, &cookie)) 815 if (!CBS_get_u8_length_prefixed(&hello_verify_request, &cookie))
816 goto truncated; 816 goto decode_err;
817 if (CBS_len(&hello_verify_request) != 0) 817 if (CBS_len(&hello_verify_request) != 0)
818 goto truncated; 818 goto decode_err;
819 819
820 /* 820 /*
821 * Per RFC 6347 section 4.2.1, the HelloVerifyRequest should always 821 * Per RFC 6347 section 4.2.1, the HelloVerifyRequest should always
@@ -840,9 +840,9 @@ ssl3_get_dtls_hello_verify(SSL *s)
840 840
841 return 1; 841 return 1;
842 842
843truncated: 843 decode_err:
844 al = SSL_AD_DECODE_ERROR; 844 al = SSL_AD_DECODE_ERROR;
845f_err: 845 f_err:
846 ssl3_send_alert(s, SSL3_AL_FATAL, al); 846 ssl3_send_alert(s, SSL3_AL_FATAL, al);
847 return -1; 847 return -1;
848} 848}
@@ -869,7 +869,7 @@ ssl3_get_server_hello(SSL *s)
869 s->internal->first_packet = 0; 869 s->internal->first_packet = 0;
870 870
871 if (n < 0) 871 if (n < 0)
872 goto truncated; 872 goto decode_err;
873 873
874 CBS_init(&cbs, s->internal->init_msg, n); 874 CBS_init(&cbs, s->internal->init_msg, n);
875 875
@@ -894,7 +894,7 @@ ssl3_get_server_hello(SSL *s)
894 } 894 }
895 895
896 if (!CBS_get_u16(&cbs, &server_version)) 896 if (!CBS_get_u16(&cbs, &server_version))
897 goto truncated; 897 goto decode_err;
898 898
899 if (ssl_supported_version_range(s, &min_version, &max_version) != 1) { 899 if (ssl_supported_version_range(s, &min_version, &max_version) != 1) {
900 SSLerror(s, SSL_R_NO_PROTOCOLS_AVAILABLE); 900 SSLerror(s, SSL_R_NO_PROTOCOLS_AVAILABLE);
@@ -917,7 +917,7 @@ ssl3_get_server_hello(SSL *s)
917 917
918 /* Server random. */ 918 /* Server random. */
919 if (!CBS_get_bytes(&cbs, &server_random, SSL3_RANDOM_SIZE)) 919 if (!CBS_get_bytes(&cbs, &server_random, SSL3_RANDOM_SIZE))
920 goto truncated; 920 goto decode_err;
921 if (!CBS_write_bytes(&server_random, s->s3->server_random, 921 if (!CBS_write_bytes(&server_random, s->s3->server_random,
922 sizeof(s->s3->server_random), NULL)) 922 sizeof(s->s3->server_random), NULL))
923 goto err; 923 goto err;
@@ -950,7 +950,7 @@ ssl3_get_server_hello(SSL *s)
950 950
951 /* Session ID. */ 951 /* Session ID. */
952 if (!CBS_get_u8_length_prefixed(&cbs, &session_id)) 952 if (!CBS_get_u8_length_prefixed(&cbs, &session_id))
953 goto truncated; 953 goto decode_err;
954 954
955 if (CBS_len(&session_id) > SSL3_SESSION_ID_SIZE) { 955 if (CBS_len(&session_id) > SSL3_SESSION_ID_SIZE) {
956 al = SSL_AD_ILLEGAL_PARAMETER; 956 al = SSL_AD_ILLEGAL_PARAMETER;
@@ -960,7 +960,7 @@ ssl3_get_server_hello(SSL *s)
960 960
961 /* Cipher suite. */ 961 /* Cipher suite. */
962 if (!CBS_get_u16(&cbs, &cipher_suite)) 962 if (!CBS_get_u16(&cbs, &cipher_suite))
963 goto truncated; 963 goto decode_err;
964 964
965 /* 965 /*
966 * Check if we want to resume the session based on external 966 * Check if we want to resume the session based on external
@@ -1063,7 +1063,7 @@ ssl3_get_server_hello(SSL *s)
1063 tls1_transcript_free(s); 1063 tls1_transcript_free(s);
1064 1064
1065 if (!CBS_get_u8(&cbs, &compression_method)) 1065 if (!CBS_get_u8(&cbs, &compression_method))
1066 goto truncated; 1066 goto decode_err;
1067 1067
1068 if (compression_method != 0) { 1068 if (compression_method != 0) {
1069 al = SSL_AD_ILLEGAL_PARAMETER; 1069 al = SSL_AD_ILLEGAL_PARAMETER;
@@ -1098,13 +1098,13 @@ ssl3_get_server_hello(SSL *s)
1098 1098
1099 return (1); 1099 return (1);
1100 1100
1101truncated: 1101 decode_err:
1102 /* wrong packet length */ 1102 /* wrong packet length */
1103 al = SSL_AD_DECODE_ERROR; 1103 al = SSL_AD_DECODE_ERROR;
1104 SSLerror(s, SSL_R_BAD_PACKET_LENGTH); 1104 SSLerror(s, SSL_R_BAD_PACKET_LENGTH);
1105f_err: 1105 f_err:
1106 ssl3_send_alert(s, SSL3_AL_FATAL, al); 1106 ssl3_send_alert(s, SSL3_AL_FATAL, al);
1107err: 1107 err:
1108 return (-1); 1108 return (-1);
1109} 1109}
1110 1110
@@ -1143,11 +1143,11 @@ ssl3_get_server_certificate(SSL *s)
1143 } 1143 }
1144 1144
1145 if (n < 0) 1145 if (n < 0)
1146 goto truncated; 1146 goto decode_err;
1147 1147
1148 CBS_init(&cbs, s->internal->init_msg, n); 1148 CBS_init(&cbs, s->internal->init_msg, n);
1149 if (CBS_len(&cbs) < 3) 1149 if (CBS_len(&cbs) < 3)
1150 goto truncated; 1150 goto decode_err;
1151 1151
1152 if (!CBS_get_u24_length_prefixed(&cbs, &cert_list) || 1152 if (!CBS_get_u24_length_prefixed(&cbs, &cert_list) ||
1153 CBS_len(&cbs) != 0) { 1153 CBS_len(&cbs) != 0) {
@@ -1160,7 +1160,7 @@ ssl3_get_server_certificate(SSL *s)
1160 CBS cert; 1160 CBS cert;
1161 1161
1162 if (CBS_len(&cert_list) < 3) 1162 if (CBS_len(&cert_list) < 3)
1163 goto truncated; 1163 goto decode_err;
1164 if (!CBS_get_u24_length_prefixed(&cert_list, &cert)) { 1164 if (!CBS_get_u24_length_prefixed(&cert_list, &cert)) {
1165 al = SSL_AD_DECODE_ERROR; 1165 al = SSL_AD_DECODE_ERROR;
1166 SSLerror(s, SSL_R_CERT_LENGTH_MISMATCH); 1166 SSLerror(s, SSL_R_CERT_LENGTH_MISMATCH);
@@ -1246,14 +1246,14 @@ ssl3_get_server_certificate(SSL *s)
1246 ret = 1; 1246 ret = 1;
1247 1247
1248 if (0) { 1248 if (0) {
1249truncated: 1249 decode_err:
1250 /* wrong packet length */ 1250 /* wrong packet length */
1251 al = SSL_AD_DECODE_ERROR; 1251 al = SSL_AD_DECODE_ERROR;
1252 SSLerror(s, SSL_R_BAD_PACKET_LENGTH); 1252 SSLerror(s, SSL_R_BAD_PACKET_LENGTH);
1253f_err: 1253 f_err:
1254 ssl3_send_alert(s, SSL3_AL_FATAL, al); 1254 ssl3_send_alert(s, SSL3_AL_FATAL, al);
1255 } 1255 }
1256err: 1256 err:
1257 EVP_PKEY_free(pkey); 1257 EVP_PKEY_free(pkey);
1258 X509_free(x); 1258 X509_free(x);
1259 sk_X509_pop_free(sk, X509_free); 1259 sk_X509_pop_free(sk, X509_free);
@@ -1280,21 +1280,21 @@ ssl3_get_server_kex_dhe(SSL *s, EVP_PKEY **pkey, CBS *cbs)
1280 } 1280 }
1281 1281
1282 if (!CBS_get_u16_length_prefixed(cbs, &dhp)) 1282 if (!CBS_get_u16_length_prefixed(cbs, &dhp))
1283 goto truncated; 1283 goto decode_err;
1284 if ((dh->p = BN_bin2bn(CBS_data(&dhp), CBS_len(&dhp), NULL)) == NULL) { 1284 if ((dh->p = BN_bin2bn(CBS_data(&dhp), CBS_len(&dhp), NULL)) == NULL) {
1285 SSLerror(s, ERR_R_BN_LIB); 1285 SSLerror(s, ERR_R_BN_LIB);
1286 goto err; 1286 goto err;
1287 } 1287 }
1288 1288
1289 if (!CBS_get_u16_length_prefixed(cbs, &dhg)) 1289 if (!CBS_get_u16_length_prefixed(cbs, &dhg))
1290 goto truncated; 1290 goto decode_err;
1291 if ((dh->g = BN_bin2bn(CBS_data(&dhg), CBS_len(&dhg), NULL)) == NULL) { 1291 if ((dh->g = BN_bin2bn(CBS_data(&dhg), CBS_len(&dhg), NULL)) == NULL) {
1292 SSLerror(s, ERR_R_BN_LIB); 1292 SSLerror(s, ERR_R_BN_LIB);
1293 goto err; 1293 goto err;
1294 } 1294 }
1295 1295
1296 if (!CBS_get_u16_length_prefixed(cbs, &dhpk)) 1296 if (!CBS_get_u16_length_prefixed(cbs, &dhpk))
1297 goto truncated; 1297 goto decode_err;
1298 if ((dh->pub_key = BN_bin2bn(CBS_data(&dhpk), CBS_len(&dhpk), 1298 if ((dh->pub_key = BN_bin2bn(CBS_data(&dhpk), CBS_len(&dhpk),
1299 NULL)) == NULL) { 1299 NULL)) == NULL) {
1300 SSLerror(s, ERR_R_BN_LIB); 1300 SSLerror(s, ERR_R_BN_LIB);
@@ -1320,7 +1320,7 @@ ssl3_get_server_kex_dhe(SSL *s, EVP_PKEY **pkey, CBS *cbs)
1320 1320
1321 return (1); 1321 return (1);
1322 1322
1323 truncated: 1323 decode_err:
1324 al = SSL_AD_DECODE_ERROR; 1324 al = SSL_AD_DECODE_ERROR;
1325 SSLerror(s, SSL_R_BAD_PACKET_LENGTH); 1325 SSLerror(s, SSL_R_BAD_PACKET_LENGTH);
1326 ssl3_send_alert(s, SSL3_AL_FATAL, al); 1326 ssl3_send_alert(s, SSL3_AL_FATAL, al);
@@ -1428,7 +1428,7 @@ ssl3_get_server_kex_ecdhe(SSL *s, EVP_PKEY **pkey, CBS *cbs)
1428 } 1428 }
1429 1429
1430 if (!CBS_get_u8_length_prefixed(cbs, &public)) 1430 if (!CBS_get_u8_length_prefixed(cbs, &public))
1431 goto truncated; 1431 goto decode_err;
1432 1432
1433 if (nid == NID_X25519) { 1433 if (nid == NID_X25519) {
1434 if (ssl3_get_server_kex_ecdhe_ecx(s, sc, nid, &public) != 1) 1434 if (ssl3_get_server_kex_ecdhe_ecx(s, sc, nid, &public) != 1)
@@ -1453,7 +1453,7 @@ ssl3_get_server_kex_ecdhe(SSL *s, EVP_PKEY **pkey, CBS *cbs)
1453 1453
1454 return (1); 1454 return (1);
1455 1455
1456 truncated: 1456 decode_err:
1457 al = SSL_AD_DECODE_ERROR; 1457 al = SSL_AD_DECODE_ERROR;
1458 SSLerror(s, SSL_R_BAD_PACKET_LENGTH); 1458 SSLerror(s, SSL_R_BAD_PACKET_LENGTH);
1459 1459
@@ -1552,7 +1552,7 @@ ssl3_get_server_key_exchange(SSL *s)
1552 uint16_t sigalg_value; 1552 uint16_t sigalg_value;
1553 1553
1554 if (!CBS_get_u16(&cbs, &sigalg_value)) 1554 if (!CBS_get_u16(&cbs, &sigalg_value))
1555 goto truncated; 1555 goto decode_err;
1556 if ((sigalg = ssl_sigalg(sigalg_value, tls12_sigalgs, 1556 if ((sigalg = ssl_sigalg(sigalg_value, tls12_sigalgs,
1557 tls12_sigalgs_len)) == NULL) { 1557 tls12_sigalgs_len)) == NULL) {
1558 SSLerror(s, SSL_R_UNKNOWN_DIGEST); 1558 SSLerror(s, SSL_R_UNKNOWN_DIGEST);
@@ -1581,7 +1581,7 @@ ssl3_get_server_key_exchange(SSL *s)
1581 md = sigalg->md(); 1581 md = sigalg->md();
1582 1582
1583 if (!CBS_get_u16_length_prefixed(&cbs, &signature)) 1583 if (!CBS_get_u16_length_prefixed(&cbs, &signature))
1584 goto truncated; 1584 goto decode_err;
1585 if (CBS_len(&signature) > EVP_PKEY_size(pkey)) { 1585 if (CBS_len(&signature) > EVP_PKEY_size(pkey)) {
1586 al = SSL_AD_DECODE_ERROR; 1586 al = SSL_AD_DECODE_ERROR;
1587 SSLerror(s, SSL_R_WRONG_SIGNATURE_LENGTH); 1587 SSLerror(s, SSL_R_WRONG_SIGNATURE_LENGTH);
@@ -1628,7 +1628,7 @@ ssl3_get_server_key_exchange(SSL *s)
1628 1628
1629 return (1); 1629 return (1);
1630 1630
1631 truncated: 1631 decode_err:
1632 al = SSL_AD_DECODE_ERROR; 1632 al = SSL_AD_DECODE_ERROR;
1633 SSLerror(s, SSL_R_BAD_PACKET_LENGTH); 1633 SSLerror(s, SSL_R_BAD_PACKET_LENGTH);
1634 1634
@@ -1684,7 +1684,7 @@ ssl3_get_certificate_request(SSL *s)
1684 } 1684 }
1685 1685
1686 if (n < 0) 1686 if (n < 0)
1687 goto truncated; 1687 goto decode_err;
1688 CBS_init(&cert_request, s->internal->init_msg, n); 1688 CBS_init(&cert_request, s->internal->init_msg, n);
1689 1689
1690 if ((ca_sk = sk_X509_NAME_new(ca_dn_cmp)) == NULL) { 1690 if ((ca_sk = sk_X509_NAME_new(ca_dn_cmp)) == NULL) {
@@ -1694,7 +1694,7 @@ ssl3_get_certificate_request(SSL *s)
1694 1694
1695 /* get the certificate types */ 1695 /* get the certificate types */
1696 if (!CBS_get_u8(&cert_request, &ctype_num)) 1696 if (!CBS_get_u8(&cert_request, &ctype_num))
1697 goto truncated; 1697 goto decode_err;
1698 1698
1699 if (ctype_num > SSL3_CT_NUMBER) 1699 if (ctype_num > SSL3_CT_NUMBER)
1700 ctype_num = SSL3_CT_NUMBER; 1700 ctype_num = SSL3_CT_NUMBER;
@@ -1783,10 +1783,10 @@ ssl3_get_certificate_request(SSL *s)
1783 1783
1784 ret = 1; 1784 ret = 1;
1785 if (0) { 1785 if (0) {
1786truncated: 1786 decode_err:
1787 SSLerror(s, SSL_R_BAD_PACKET_LENGTH); 1787 SSLerror(s, SSL_R_BAD_PACKET_LENGTH);
1788 } 1788 }
1789err: 1789 err:
1790 X509_NAME_free(xn); 1790 X509_NAME_free(xn);
1791 sk_X509_NAME_pop_free(ca_sk, X509_NAME_free); 1791 sk_X509_NAME_pop_free(ca_sk, X509_NAME_free);
1792 return (ret); 1792 return (ret);
@@ -1867,9 +1867,9 @@ ssl3_get_new_session_ticket(SSL *s)
1867 EVP_sha256(), NULL); 1867 EVP_sha256(), NULL);
1868 ret = 1; 1868 ret = 1;
1869 return (ret); 1869 return (ret);
1870f_err: 1870 f_err:
1871 ssl3_send_alert(s, SSL3_AL_FATAL, al); 1871 ssl3_send_alert(s, SSL3_AL_FATAL, al);
1872err: 1872 err:
1873 return (-1); 1873 return (-1);
1874} 1874}
1875 1875
@@ -1921,7 +1921,7 @@ ssl3_get_cert_status(SSL *s)
1921 al = SSL_AD_INTERNAL_ERROR; 1921 al = SSL_AD_INTERNAL_ERROR;
1922 SSLerror(s, ERR_R_MALLOC_FAILURE); 1922 SSLerror(s, ERR_R_MALLOC_FAILURE);
1923 goto f_err; 1923 goto f_err;
1924 } 1924 }
1925 1925
1926 if (s->ctx->internal->tlsext_status_cb) { 1926 if (s->ctx->internal->tlsext_status_cb) {
1927 int ret; 1927 int ret;
@@ -1939,7 +1939,7 @@ ssl3_get_cert_status(SSL *s)
1939 } 1939 }
1940 } 1940 }
1941 return (1); 1941 return (1);
1942f_err: 1942 f_err:
1943 ssl3_send_alert(s, SSL3_AL_FATAL, al); 1943 ssl3_send_alert(s, SSL3_AL_FATAL, al);
1944 return (-1); 1944 return (-1);
1945} 1945}
@@ -2016,7 +2016,7 @@ ssl3_send_client_kex_rsa(SSL *s, SESS_CERT *sess_cert, CBB *cbb)
2016 2016
2017 ret = 1; 2017 ret = 1;
2018 2018
2019err: 2019 err:
2020 explicit_bzero(pms, sizeof(pms)); 2020 explicit_bzero(pms, sizeof(pms));
2021 EVP_PKEY_free(pkey); 2021 EVP_PKEY_free(pkey);
2022 free(enc_pms); 2022 free(enc_pms);
@@ -2079,7 +2079,7 @@ ssl3_send_client_kex_dhe(SSL *s, SESS_CERT *sess_cert, CBB *cbb)
2079 2079
2080 ret = 1; 2080 ret = 1;
2081 2081
2082err: 2082 err:
2083 DH_free(dh_clnt); 2083 DH_free(dh_clnt);
2084 freezero(key, key_size); 2084 freezero(key, key_size);
2085 2085
@@ -2349,7 +2349,7 @@ ssl3_send_client_key_exchange(SSL *s)
2349 /* SSL3_ST_CW_KEY_EXCH_B */ 2349 /* SSL3_ST_CW_KEY_EXCH_B */
2350 return (ssl3_handshake_write(s)); 2350 return (ssl3_handshake_write(s));
2351 2351
2352err: 2352 err:
2353 CBB_cleanup(&cbb); 2353 CBB_cleanup(&cbb);
2354 2354
2355 return (-1); 2355 return (-1);
@@ -2767,9 +2767,9 @@ ssl3_check_cert_and_algorithm(SSL *s)
2767 } 2767 }
2768 2768
2769 return (1); 2769 return (1);
2770f_err: 2770 f_err:
2771 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); 2771 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
2772err: 2772 err:
2773 return (0); 2773 return (0);
2774} 2774}
2775 2775