diff options
Diffstat (limited to 'src/lib/libssl/ssl_lib.c')
| -rw-r--r-- | src/lib/libssl/ssl_lib.c | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/src/lib/libssl/ssl_lib.c b/src/lib/libssl/ssl_lib.c index 7eb192eb2c..d9e5166cdd 100644 --- a/src/lib/libssl/ssl_lib.c +++ b/src/lib/libssl/ssl_lib.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_lib.c,v 1.125 2017/01/21 04:16:49 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_lib.c,v 1.126 2017/01/22 03:50:45 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 | * |
| @@ -274,10 +274,15 @@ SSL_new(SSL_CTX *ctx) | |||
| 274 | return (NULL); | 274 | return (NULL); |
| 275 | } | 275 | } |
| 276 | 276 | ||
| 277 | s = calloc(1, sizeof(SSL)); | 277 | if ((s = calloc(1, sizeof(*s))) == NULL) { |
| 278 | if (s == NULL) | 278 | SSLerr(SSL_F_SSL_NEW, ERR_R_MALLOC_FAILURE); |
| 279 | goto err; | 279 | return (NULL); |
| 280 | 280 | } | |
| 281 | if ((s->internal = calloc(1, sizeof(*s->internal))) == NULL) { | ||
| 282 | free(s); | ||
| 283 | SSLerr(SSL_F_SSL_NEW, ERR_R_MALLOC_FAILURE); | ||
| 284 | return (NULL); | ||
| 285 | } | ||
| 281 | 286 | ||
| 282 | s->options = ctx->options; | 287 | s->options = ctx->options; |
| 283 | s->mode = ctx->mode; | 288 | s->mode = ctx->mode; |
| @@ -361,7 +366,7 @@ SSL_new(SSL_CTX *ctx) | |||
| 361 | 366 | ||
| 362 | return (s); | 367 | return (s); |
| 363 | 368 | ||
| 364 | err: | 369 | err: |
| 365 | SSL_free(s); | 370 | SSL_free(s); |
| 366 | SSLerr(SSL_F_SSL_NEW, ERR_R_MALLOC_FAILURE); | 371 | SSLerr(SSL_F_SSL_NEW, ERR_R_MALLOC_FAILURE); |
| 367 | return (NULL); | 372 | return (NULL); |
| @@ -549,7 +554,6 @@ SSL_free(SSL *s) | |||
| 549 | 554 | ||
| 550 | SSL_CTX_free(s->ctx); | 555 | SSL_CTX_free(s->ctx); |
| 551 | 556 | ||
| 552 | |||
| 553 | free(s->next_proto_negotiated); | 557 | free(s->next_proto_negotiated); |
| 554 | free(s->alpn_client_proto_list); | 558 | free(s->alpn_client_proto_list); |
| 555 | 559 | ||
| @@ -558,6 +562,7 @@ SSL_free(SSL *s) | |||
| 558 | sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles); | 562 | sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles); |
| 559 | #endif | 563 | #endif |
| 560 | 564 | ||
| 565 | free(s->internal); | ||
| 561 | free(s); | 566 | free(s); |
| 562 | } | 567 | } |
| 563 | 568 | ||
| @@ -1792,21 +1797,28 @@ ssl_session_LHASH_COMP(const void *arg1, const void *arg2) | |||
| 1792 | SSL_CTX * | 1797 | SSL_CTX * |
| 1793 | SSL_CTX_new(const SSL_METHOD *meth) | 1798 | SSL_CTX_new(const SSL_METHOD *meth) |
| 1794 | { | 1799 | { |
| 1795 | SSL_CTX *ret = NULL; | 1800 | SSL_CTX *ret; |
| 1796 | 1801 | ||
| 1797 | if (meth == NULL) { | 1802 | if (meth == NULL) { |
| 1798 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_NULL_SSL_METHOD_PASSED); | 1803 | SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_NULL_SSL_METHOD_PASSED); |
| 1799 | return (NULL); | 1804 | return (NULL); |
| 1800 | } | 1805 | } |
| 1801 | 1806 | ||
| 1807 | if ((ret = calloc(1, sizeof(*ret))) == NULL) { | ||
| 1808 | SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE); | ||
| 1809 | return (NULL); | ||
| 1810 | } | ||
| 1811 | if ((ret->internal = calloc(1, sizeof(*ret->internal))) == NULL) { | ||
| 1812 | free(ret); | ||
| 1813 | SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE); | ||
| 1814 | return (NULL); | ||
| 1815 | } | ||
| 1816 | |||
| 1802 | if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) { | 1817 | if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) { |
| 1803 | SSLerr(SSL_F_SSL_CTX_NEW, | 1818 | SSLerr(SSL_F_SSL_CTX_NEW, |
| 1804 | SSL_R_X509_VERIFICATION_SETUP_PROBLEMS); | 1819 | SSL_R_X509_VERIFICATION_SETUP_PROBLEMS); |
| 1805 | goto err; | 1820 | goto err; |
| 1806 | } | 1821 | } |
| 1807 | ret = calloc(1, sizeof(SSL_CTX)); | ||
| 1808 | if (ret == NULL) | ||
| 1809 | goto err; | ||
| 1810 | 1822 | ||
| 1811 | ret->method = meth; | 1823 | ret->method = meth; |
| 1812 | 1824 | ||
| @@ -1993,6 +2005,7 @@ SSL_CTX_free(SSL_CTX *a) | |||
| 1993 | 2005 | ||
| 1994 | free(a->alpn_client_proto_list); | 2006 | free(a->alpn_client_proto_list); |
| 1995 | 2007 | ||
| 2008 | free(a->internal); | ||
| 1996 | free(a); | 2009 | free(a); |
| 1997 | } | 2010 | } |
| 1998 | 2011 | ||
