diff options
Diffstat (limited to 'src/lib/libssl/t1_lib.c')
-rw-r--r-- | src/lib/libssl/t1_lib.c | 65 |
1 files changed, 39 insertions, 26 deletions
diff --git a/src/lib/libssl/t1_lib.c b/src/lib/libssl/t1_lib.c index 99298c1791..c45708bf78 100644 --- a/src/lib/libssl/t1_lib.c +++ b/src/lib/libssl/t1_lib.c | |||
@@ -1154,12 +1154,15 @@ ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, | |||
1154 | if (s->s3->client_opaque_prf_input != NULL) /* shouldn't really happen */ | 1154 | if (s->s3->client_opaque_prf_input != NULL) /* shouldn't really happen */ |
1155 | free(s->s3->client_opaque_prf_input); | 1155 | free(s->s3->client_opaque_prf_input); |
1156 | if (s->s3->client_opaque_prf_input_len == 0) | 1156 | if (s->s3->client_opaque_prf_input_len == 0) |
1157 | s->s3->client_opaque_prf_input = malloc(1); /* dummy byte just to get non-NULL */ | 1157 | s->s3->client_opaque_prf_input = NULL; |
1158 | else | 1158 | else { |
1159 | s->s3->client_opaque_prf_input = BUF_memdup(sdata, s->s3->client_opaque_prf_input_len); | 1159 | s->s3->client_opaque_prf_input = |
1160 | if (s->s3->client_opaque_prf_input == NULL) { | 1160 | BUF_memdup(sdata, |
1161 | *al = TLS1_AD_INTERNAL_ERROR; | 1161 | s->s3->client_opaque_prf_input_len); |
1162 | return 0; | 1162 | if (s->s3->client_opaque_prf_input == NULL) { |
1163 | *al = TLS1_AD_INTERNAL_ERROR; | ||
1164 | return 0; | ||
1165 | } | ||
1163 | } | 1166 | } |
1164 | } | 1167 | } |
1165 | #endif | 1168 | #endif |
@@ -1458,13 +1461,15 @@ ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d, | |||
1458 | if (s->s3->server_opaque_prf_input != NULL) /* shouldn't really happen */ | 1461 | if (s->s3->server_opaque_prf_input != NULL) /* shouldn't really happen */ |
1459 | free(s->s3->server_opaque_prf_input); | 1462 | free(s->s3->server_opaque_prf_input); |
1460 | if (s->s3->server_opaque_prf_input_len == 0) | 1463 | if (s->s3->server_opaque_prf_input_len == 0) |
1461 | s->s3->server_opaque_prf_input = malloc(1); /* dummy byte just to get non-NULL */ | 1464 | s->s3->server_opaque_prf_input = NULL; |
1462 | else | 1465 | else { |
1463 | s->s3->server_opaque_prf_input = BUF_memdup(sdata, s->s3->server_opaque_prf_input_len); | 1466 | s->s3->server_opaque_prf_input = |
1464 | 1467 | BUF_memdup(sdata, | |
1465 | if (s->s3->server_opaque_prf_input == NULL) { | 1468 | s->s3->server_opaque_prf_input_len); |
1466 | *al = TLS1_AD_INTERNAL_ERROR; | 1469 | if (s->s3->server_opaque_prf_input == NULL) { |
1467 | return 0; | 1470 | *al = TLS1_AD_INTERNAL_ERROR; |
1471 | return 0; | ||
1472 | } | ||
1468 | } | 1473 | } |
1469 | } | 1474 | } |
1470 | #endif | 1475 | #endif |
@@ -1639,12 +1644,16 @@ ssl_prepare_clienthello_tlsext(SSL *s) | |||
1639 | free(s->s3->client_opaque_prf_input); | 1644 | free(s->s3->client_opaque_prf_input); |
1640 | 1645 | ||
1641 | if (s->tlsext_opaque_prf_input_len == 0) | 1646 | if (s->tlsext_opaque_prf_input_len == 0) |
1642 | s->s3->client_opaque_prf_input = malloc(1); /* dummy byte just to get non-NULL */ | 1647 | s->s3->client_opaque_prf_input = NULL; |
1643 | else | 1648 | else { |
1644 | s->s3->client_opaque_prf_input = BUF_memdup(s->tlsext_opaque_prf_input, s->tlsext_opaque_prf_input_len); | 1649 | s->s3->client_opaque_prf_input = |
1645 | if (s->s3->client_opaque_prf_input == NULL) { | 1650 | BUF_memdup(s->tlsext_opaque_prf_input, |
1646 | SSLerr(SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT, ERR_R_MALLOC_FAILURE); | 1651 | s->tlsext_opaque_prf_input_len); |
1647 | return -1; | 1652 | if (s->s3->client_opaque_prf_input == NULL) { |
1653 | SSLerr(SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT, | ||
1654 | ERR_R_MALLOC_FAILURE); | ||
1655 | return -1; | ||
1656 | } | ||
1648 | } | 1657 | } |
1649 | s->s3->client_opaque_prf_input_len = s->tlsext_opaque_prf_input_len; | 1658 | s->s3->client_opaque_prf_input_len = s->tlsext_opaque_prf_input_len; |
1650 | } | 1659 | } |
@@ -1740,13 +1749,17 @@ ssl_check_clienthello_tlsext_early(SSL *s) | |||
1740 | * of the same length as the client opaque PRF input! */ | 1749 | * of the same length as the client opaque PRF input! */ |
1741 | 1750 | ||
1742 | if (s->tlsext_opaque_prf_input_len == 0) | 1751 | if (s->tlsext_opaque_prf_input_len == 0) |
1743 | s->s3->server_opaque_prf_input = malloc(1); /* dummy byte just to get non-NULL */ | 1752 | s->s3->server_opaque_prf_input = NULL; |
1744 | else | 1753 | else { |
1745 | s->s3->server_opaque_prf_input = BUF_memdup(s->tlsext_opaque_prf_input, s->tlsext_opaque_prf_input_len); | 1754 | s->s3->server_opaque_prf_input = |
1746 | if (s->s3->server_opaque_prf_input == NULL) { | 1755 | BUF_memdup(s->tlsext_opaque_prf_input, |
1747 | ret = SSL_TLSEXT_ERR_ALERT_FATAL; | 1756 | s->tlsext_opaque_prf_input_len); |
1748 | al = SSL_AD_INTERNAL_ERROR; | 1757 | if (s->s3->server_opaque_prf_input == |
1749 | goto err; | 1758 | NULL) { |
1759 | ret = SSL_TLSEXT_ERR_ALERT_FATAL; | ||
1760 | al = SSL_AD_INTERNAL_ERROR; | ||
1761 | goto err; | ||
1762 | } | ||
1750 | } | 1763 | } |
1751 | s->s3->server_opaque_prf_input_len = s->tlsext_opaque_prf_input_len; | 1764 | s->s3->server_opaque_prf_input_len = s->tlsext_opaque_prf_input_len; |
1752 | } | 1765 | } |