summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormiod <>2014-05-26 20:54:06 +0000
committermiod <>2014-05-26 20:54:06 +0000
commitff902a2ab8de41d828e44691e4fcd5e828a0ee2c (patch)
treec839ab4f405bfea1c43fddd81eb73b59b27f5ef3 /src
parentbc3247c8eb23411aa06a89056f623998745a0bb5 (diff)
downloadopenbsd-ff902a2ab8de41d828e44691e4fcd5e828a0ee2c.tar.gz
openbsd-ff902a2ab8de41d828e44691e4fcd5e828a0ee2c.tar.bz2
openbsd-ff902a2ab8de41d828e44691e4fcd5e828a0ee2c.zip
Replace the following logic:
if (nothing to allocate) ptr = malloc(1) else { if ((ptr = malloc(size to allocate)) memcpy(ptr, data to copy, size to allocate) } if (ptr == NULL) OMG ERROR with a saner logic where the NULL pointer check if moved to the actual malloc branch, so that we do not need to malloc a single byte, just to avoid having a NULL pointer. Whoever thought allocating a single byte was a smart idea was obviously not taking his meds. ok beck@ guenther@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libssl/s3_lib.c18
-rw-r--r--src/lib/libssl/src/ssl/s3_lib.c18
-rw-r--r--src/lib/libssl/src/ssl/t1_lib.c65
-rw-r--r--src/lib/libssl/t1_lib.c65
4 files changed, 98 insertions, 68 deletions
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c
index 8b67e7c36a..d8a186040b 100644
--- a/src/lib/libssl/s3_lib.c
+++ b/src/lib/libssl/s3_lib.c
@@ -2633,16 +2633,18 @@ ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
2633 if (s->tlsext_opaque_prf_input != NULL) 2633 if (s->tlsext_opaque_prf_input != NULL)
2634 free(s->tlsext_opaque_prf_input); 2634 free(s->tlsext_opaque_prf_input);
2635 if ((size_t)larg == 0) { 2635 if ((size_t)larg == 0) {
2636 /* dummy byte just to get non-NULL */ 2636 s->tlsext_opaque_prf_input = NULL;
2637 s->tlsext_opaque_prf_input = malloc(1); 2637 s->tlsext_opaque_prf_input_len = 0;
2638 } else 2638 ret = 1;
2639 } else {
2639 s->tlsext_opaque_prf_input = 2640 s->tlsext_opaque_prf_input =
2640 BUF_memdup(parg, (size_t)larg); 2641 BUF_memdup(parg, (size_t)larg);
2641 if (s->tlsext_opaque_prf_input != NULL) { 2642 if (s->tlsext_opaque_prf_input != NULL) {
2642 s->tlsext_opaque_prf_input_len = (size_t)larg; 2643 s->tlsext_opaque_prf_input_len = (size_t)larg;
2643 ret = 1; 2644 ret = 1;
2644 } else 2645 } else
2645 s->tlsext_opaque_prf_input_len = 0; 2646 s->tlsext_opaque_prf_input_len = 0;
2647 }
2646 break; 2648 break;
2647#endif 2649#endif
2648 2650
diff --git a/src/lib/libssl/src/ssl/s3_lib.c b/src/lib/libssl/src/ssl/s3_lib.c
index 8b67e7c36a..d8a186040b 100644
--- a/src/lib/libssl/src/ssl/s3_lib.c
+++ b/src/lib/libssl/src/ssl/s3_lib.c
@@ -2633,16 +2633,18 @@ ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
2633 if (s->tlsext_opaque_prf_input != NULL) 2633 if (s->tlsext_opaque_prf_input != NULL)
2634 free(s->tlsext_opaque_prf_input); 2634 free(s->tlsext_opaque_prf_input);
2635 if ((size_t)larg == 0) { 2635 if ((size_t)larg == 0) {
2636 /* dummy byte just to get non-NULL */ 2636 s->tlsext_opaque_prf_input = NULL;
2637 s->tlsext_opaque_prf_input = malloc(1); 2637 s->tlsext_opaque_prf_input_len = 0;
2638 } else 2638 ret = 1;
2639 } else {
2639 s->tlsext_opaque_prf_input = 2640 s->tlsext_opaque_prf_input =
2640 BUF_memdup(parg, (size_t)larg); 2641 BUF_memdup(parg, (size_t)larg);
2641 if (s->tlsext_opaque_prf_input != NULL) { 2642 if (s->tlsext_opaque_prf_input != NULL) {
2642 s->tlsext_opaque_prf_input_len = (size_t)larg; 2643 s->tlsext_opaque_prf_input_len = (size_t)larg;
2643 ret = 1; 2644 ret = 1;
2644 } else 2645 } else
2645 s->tlsext_opaque_prf_input_len = 0; 2646 s->tlsext_opaque_prf_input_len = 0;
2647 }
2646 break; 2648 break;
2647#endif 2649#endif
2648 2650
diff --git a/src/lib/libssl/src/ssl/t1_lib.c b/src/lib/libssl/src/ssl/t1_lib.c
index 99298c1791..c45708bf78 100644
--- a/src/lib/libssl/src/ssl/t1_lib.c
+++ b/src/lib/libssl/src/ssl/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 }
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 }