summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_srvr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/ssl_srvr.c')
-rw-r--r--src/lib/libssl/ssl_srvr.c29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/lib/libssl/ssl_srvr.c b/src/lib/libssl/ssl_srvr.c
index 0979750e22..dd622c2831 100644
--- a/src/lib/libssl/ssl_srvr.c
+++ b/src/lib/libssl/ssl_srvr.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_srvr.c,v 1.137 2022/01/09 15:40:13 jsing Exp $ */ 1/* $OpenBSD: ssl_srvr.c,v 1.138 2022/01/11 18:28:41 jsing 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 *
@@ -1701,21 +1701,26 @@ ssl3_get_client_kex_dhe(SSL *s, CBS *cbs)
1701{ 1701{
1702 uint8_t *key = NULL; 1702 uint8_t *key = NULL;
1703 size_t key_len = 0; 1703 size_t key_len = 0;
1704 int invalid_key; 1704 int decode_error, invalid_key;
1705 int ret = 0; 1705 int ret = 0;
1706 1706
1707 if (S3I(s)->hs.key_share == NULL) { 1707 if (S3I(s)->hs.key_share == NULL) {
1708 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
1709 SSLerror(s, SSL_R_MISSING_TMP_DH_KEY); 1708 SSLerror(s, SSL_R_MISSING_TMP_DH_KEY);
1709 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
1710 goto err; 1710 goto err;
1711 } 1711 }
1712 1712
1713 if (!tls_key_share_peer_public(S3I(s)->hs.key_share, cbs, 1713 if (!tls_key_share_peer_public(S3I(s)->hs.key_share, cbs,
1714 &invalid_key)) 1714 &decode_error, &invalid_key)) {
1715 if (decode_error) {
1716 SSLerror(s, SSL_R_BAD_PACKET_LENGTH);
1717 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1718 }
1715 goto err; 1719 goto err;
1720 }
1716 if (invalid_key) { 1721 if (invalid_key) {
1717 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
1718 SSLerror(s, SSL_R_BAD_DH_PUB_KEY_LENGTH); 1722 SSLerror(s, SSL_R_BAD_DH_PUB_KEY_LENGTH);
1723 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
1719 goto err; 1724 goto err;
1720 } 1725 }
1721 1726
@@ -1738,6 +1743,7 @@ ssl3_get_client_kex_ecdhe(SSL *s, CBS *cbs)
1738{ 1743{
1739 uint8_t *key = NULL; 1744 uint8_t *key = NULL;
1740 size_t key_len = 0; 1745 size_t key_len = 0;
1746 int decode_error;
1741 CBS public; 1747 CBS public;
1742 int ret = 0; 1748 int ret = 0;
1743 1749
@@ -1747,10 +1753,19 @@ ssl3_get_client_kex_ecdhe(SSL *s, CBS *cbs)
1747 goto err; 1753 goto err;
1748 } 1754 }
1749 1755
1750 if (!CBS_get_u8_length_prefixed(cbs, &public)) 1756 if (!CBS_get_u8_length_prefixed(cbs, &public)) {
1757 SSLerror(s, SSL_R_BAD_PACKET_LENGTH);
1758 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1751 goto err; 1759 goto err;
1752 if (!tls_key_share_peer_public(S3I(s)->hs.key_share, &public, NULL)) 1760 }
1761 if (!tls_key_share_peer_public(S3I(s)->hs.key_share, &public,
1762 &decode_error, NULL)) {
1763 if (decode_error) {
1764 SSLerror(s, SSL_R_BAD_PACKET_LENGTH);
1765 ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
1766 }
1753 goto err; 1767 goto err;
1768 }
1754 1769
1755 if (!tls_key_share_derive(S3I(s)->hs.key_share, &key, &key_len)) 1770 if (!tls_key_share_derive(S3I(s)->hs.key_share, &key, &key_len))
1756 goto err; 1771 goto err;