diff options
-rw-r--r-- | src/lib/libssl/d1_lib.c | 21 | ||||
-rw-r--r-- | src/lib/libssl/dtls1.h | 6 | ||||
-rw-r--r-- | src/lib/libssl/s3_lib.c | 18 | ||||
-rw-r--r-- | src/lib/libssl/ssl.h | 16 | ||||
-rw-r--r-- | src/lib/libssl/ssl3.h | 6 | ||||
-rw-r--r-- | src/lib/libssl/ssl_lib.c | 35 | ||||
-rw-r--r-- | src/lib/libssl/ssl_locl.h | 22 | ||||
-rw-r--r-- | src/lib/libssl/ssl_sess.c | 16 |
8 files changed, 111 insertions, 29 deletions
diff --git a/src/lib/libssl/d1_lib.c b/src/lib/libssl/d1_lib.c index 56c79f30aa..3bc1b42583 100644 --- a/src/lib/libssl/d1_lib.c +++ b/src/lib/libssl/d1_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_lib.c,v 1.34 2016/11/04 18:33:11 guenther Exp $ */ | 1 | /* $OpenBSD: d1_lib.c,v 1.35 2017/01/22 03:50:45 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
@@ -105,7 +105,12 @@ dtls1_new(SSL *s) | |||
105 | 105 | ||
106 | if (!ssl3_new(s)) | 106 | if (!ssl3_new(s)) |
107 | return (0); | 107 | return (0); |
108 | if ((d1 = calloc(1, sizeof *d1)) == NULL) { | 108 | if ((d1 = calloc(1, sizeof(*d1))) == NULL) { |
109 | ssl3_free(s); | ||
110 | return (0); | ||
111 | } | ||
112 | if ((d1->internal = calloc(1, sizeof(*d1->internal))) == NULL) { | ||
113 | free(d1); | ||
109 | ssl3_free(s); | 114 | ssl3_free(s); |
110 | return (0); | 115 | return (0); |
111 | } | 116 | } |
@@ -199,14 +204,19 @@ dtls1_free(SSL *s) | |||
199 | pqueue_free(s->d1->sent_messages); | 204 | pqueue_free(s->d1->sent_messages); |
200 | pqueue_free(s->d1->buffered_app_data.q); | 205 | pqueue_free(s->d1->buffered_app_data.q); |
201 | 206 | ||
202 | explicit_bzero(s->d1, sizeof *s->d1); | 207 | explicit_bzero(s->d1->internal, sizeof(*s->d1->internal)); |
208 | free(s->d1->internal); | ||
209 | |||
210 | explicit_bzero(s->d1, sizeof(*s->d1)); | ||
203 | free(s->d1); | 211 | free(s->d1); |
212 | |||
204 | s->d1 = NULL; | 213 | s->d1 = NULL; |
205 | } | 214 | } |
206 | 215 | ||
207 | void | 216 | void |
208 | dtls1_clear(SSL *s) | 217 | dtls1_clear(SSL *s) |
209 | { | 218 | { |
219 | struct dtls1_state_internal_st *internal; | ||
210 | pqueue unprocessed_rcds; | 220 | pqueue unprocessed_rcds; |
211 | pqueue processed_rcds; | 221 | pqueue processed_rcds; |
212 | pqueue buffered_messages; | 222 | pqueue buffered_messages; |
@@ -224,7 +234,10 @@ dtls1_clear(SSL *s) | |||
224 | 234 | ||
225 | dtls1_clear_queues(s); | 235 | dtls1_clear_queues(s); |
226 | 236 | ||
227 | memset(s->d1, 0, sizeof(*(s->d1))); | 237 | memset(s->d1->internal, 0, sizeof(*s->d1->internal)); |
238 | internal = s->d1->internal; | ||
239 | memset(s->d1, 0, sizeof(*s->d1)); | ||
240 | s->d1->internal = internal; | ||
228 | 241 | ||
229 | if (s->server) { | 242 | if (s->server) { |
230 | s->d1->cookie_len = sizeof(s->d1->cookie); | 243 | s->d1->cookie_len = sizeof(s->d1->cookie); |
diff --git a/src/lib/libssl/dtls1.h b/src/lib/libssl/dtls1.h index 8ec0bb8421..812b90592d 100644 --- a/src/lib/libssl/dtls1.h +++ b/src/lib/libssl/dtls1.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: dtls1.h,v 1.19 2016/12/30 15:10:57 jsing Exp $ */ | 1 | /* $OpenBSD: dtls1.h,v 1.20 2017/01/22 03:50:45 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
@@ -150,6 +150,8 @@ typedef struct hm_fragment_st { | |||
150 | unsigned char *reassembly; | 150 | unsigned char *reassembly; |
151 | } hm_fragment; | 151 | } hm_fragment; |
152 | 152 | ||
153 | struct dtls1_state_internal_st; | ||
154 | |||
153 | typedef struct dtls1_state_st { | 155 | typedef struct dtls1_state_st { |
154 | unsigned int send_cookie; | 156 | unsigned int send_cookie; |
155 | unsigned char cookie[DTLS1_COOKIE_LENGTH]; | 157 | unsigned char cookie[DTLS1_COOKIE_LENGTH]; |
@@ -222,7 +224,7 @@ typedef struct dtls1_state_st { | |||
222 | unsigned int retransmitting; | 224 | unsigned int retransmitting; |
223 | unsigned int change_cipher_spec_ok; | 225 | unsigned int change_cipher_spec_ok; |
224 | 226 | ||
225 | 227 | struct dtls1_state_internal_st *internal; | |
226 | } DTLS1_STATE; | 228 | } DTLS1_STATE; |
227 | 229 | ||
228 | typedef struct dtls1_record_data_st { | 230 | typedef struct dtls1_record_data_st { |
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index 0dda987d4c..6f5ee4fa50 100644 --- a/src/lib/libssl/s3_lib.c +++ b/src/lib/libssl/s3_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_lib.c,v 1.117 2017/01/22 00:09:13 jsing Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.118 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 | * |
@@ -1811,6 +1811,10 @@ ssl3_new(SSL *s) | |||
1811 | { | 1811 | { |
1812 | if ((s->s3 = calloc(1, sizeof(*s->s3))) == NULL) | 1812 | if ((s->s3 = calloc(1, sizeof(*s->s3))) == NULL) |
1813 | return (0); | 1813 | return (0); |
1814 | if ((s->s3->internal = calloc(1, sizeof(*s->s3->internal))) == NULL) { | ||
1815 | free(s->s3); | ||
1816 | return (0); | ||
1817 | } | ||
1814 | 1818 | ||
1815 | s->method->ssl_clear(s); | 1819 | s->method->ssl_clear(s); |
1816 | 1820 | ||
@@ -1840,14 +1844,19 @@ ssl3_free(SSL *s) | |||
1840 | tls1_free_digest_list(s); | 1844 | tls1_free_digest_list(s); |
1841 | free(s->s3->alpn_selected); | 1845 | free(s->s3->alpn_selected); |
1842 | 1846 | ||
1843 | explicit_bzero(s->s3, sizeof *s->s3); | 1847 | explicit_bzero(s->s3->internal, sizeof(*s->s3->internal)); |
1848 | free(s->s3->internal); | ||
1849 | |||
1850 | explicit_bzero(s->s3, sizeof(*s->s3)); | ||
1844 | free(s->s3); | 1851 | free(s->s3); |
1852 | |||
1845 | s->s3 = NULL; | 1853 | s->s3 = NULL; |
1846 | } | 1854 | } |
1847 | 1855 | ||
1848 | void | 1856 | void |
1849 | ssl3_clear(SSL *s) | 1857 | ssl3_clear(SSL *s) |
1850 | { | 1858 | { |
1859 | struct ssl3_state_internal_st *internal; | ||
1851 | unsigned char *rp, *wp; | 1860 | unsigned char *rp, *wp; |
1852 | size_t rlen, wlen; | 1861 | size_t rlen, wlen; |
1853 | 1862 | ||
@@ -1878,7 +1887,10 @@ ssl3_clear(SSL *s) | |||
1878 | free(s->s3->alpn_selected); | 1887 | free(s->s3->alpn_selected); |
1879 | s->s3->alpn_selected = NULL; | 1888 | s->s3->alpn_selected = NULL; |
1880 | 1889 | ||
1881 | memset(s->s3, 0, sizeof *s->s3); | 1890 | memset(s->s3->internal, 0, sizeof(*s->s3->internal)); |
1891 | internal = s->s3->internal; | ||
1892 | memset(s->s3, 0, sizeof(*s->s3)); | ||
1893 | s->s3->internal = internal; | ||
1882 | 1894 | ||
1883 | s->s3->rbuf.buf = rp; | 1895 | s->s3->rbuf.buf = rp; |
1884 | s->s3->wbuf.buf = wp; | 1896 | s->s3->wbuf.buf = wp; |
diff --git a/src/lib/libssl/ssl.h b/src/lib/libssl/ssl.h index 37844bdeaa..e8ad9fb470 100644 --- a/src/lib/libssl/ssl.h +++ b/src/lib/libssl/ssl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl.h,v 1.102 2016/12/30 17:20:51 jsing Exp $ */ | 1 | /* $OpenBSD: ssl.h,v 1.103 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 | * |
@@ -353,6 +353,7 @@ extern "C" { | |||
353 | * 'struct ssl_st *' function parameters used to prototype callbacks | 353 | * 'struct ssl_st *' function parameters used to prototype callbacks |
354 | * in SSL_CTX. */ | 354 | * in SSL_CTX. */ |
355 | typedef struct ssl_st *ssl_crock_st; | 355 | typedef struct ssl_st *ssl_crock_st; |
356 | |||
356 | typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT; | 357 | typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT; |
357 | typedef struct ssl_method_st SSL_METHOD; | 358 | typedef struct ssl_method_st SSL_METHOD; |
358 | typedef struct ssl_cipher_st SSL_CIPHER; | 359 | typedef struct ssl_cipher_st SSL_CIPHER; |
@@ -455,6 +456,8 @@ struct ssl_method_st { | |||
455 | * Look in ssl/ssl_asn1.c for more details | 456 | * Look in ssl/ssl_asn1.c for more details |
456 | * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-). | 457 | * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-). |
457 | */ | 458 | */ |
459 | struct ssl_session_internal_st; | ||
460 | |||
458 | struct ssl_session_st { | 461 | struct ssl_session_st { |
459 | int ssl_version; /* what ssl version session info is | 462 | int ssl_version; /* what ssl version session info is |
460 | * being kept in here? */ | 463 | * being kept in here? */ |
@@ -513,6 +516,8 @@ struct ssl_session_st { | |||
513 | unsigned char *tlsext_tick; /* Session ticket */ | 516 | unsigned char *tlsext_tick; /* Session ticket */ |
514 | size_t tlsext_ticklen; /* Session ticket length */ | 517 | size_t tlsext_ticklen; /* Session ticket length */ |
515 | long tlsext_tick_lifetime_hint; /* Session lifetime hint in seconds */ | 518 | long tlsext_tick_lifetime_hint; /* Session lifetime hint in seconds */ |
519 | |||
520 | struct ssl_session_internal_st *internal; | ||
516 | }; | 521 | }; |
517 | 522 | ||
518 | #endif | 523 | #endif |
@@ -687,6 +692,8 @@ struct lhash_st_SSL_SESSION { | |||
687 | int dummy; | 692 | int dummy; |
688 | }; | 693 | }; |
689 | 694 | ||
695 | struct ssl_ctx_internal_st; | ||
696 | |||
690 | struct ssl_ctx_st { | 697 | struct ssl_ctx_st { |
691 | const SSL_METHOD *method; | 698 | const SSL_METHOD *method; |
692 | 699 | ||
@@ -885,6 +892,8 @@ struct ssl_ctx_st { | |||
885 | 892 | ||
886 | /* SRTP profiles we are willing to do from RFC 5764 */ | 893 | /* SRTP profiles we are willing to do from RFC 5764 */ |
887 | STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; | 894 | STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; |
895 | |||
896 | struct ssl_ctx_internal_st *internal; | ||
888 | }; | 897 | }; |
889 | 898 | ||
890 | #endif | 899 | #endif |
@@ -997,6 +1006,7 @@ void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, | |||
997 | #define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 | 1006 | #define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 |
998 | 1007 | ||
999 | #ifndef OPENSSL_NO_SSL_INTERN | 1008 | #ifndef OPENSSL_NO_SSL_INTERN |
1009 | struct ssl_internal_st; | ||
1000 | 1010 | ||
1001 | struct ssl_st { | 1011 | struct ssl_st { |
1002 | /* protocol version | 1012 | /* protocol version |
@@ -1192,6 +1202,7 @@ struct ssl_st { | |||
1192 | void *tls_session_secret_cb_arg; | 1202 | void *tls_session_secret_cb_arg; |
1193 | 1203 | ||
1194 | SSL_CTX * initial_ctx; /* initial ctx, used to store sessions */ | 1204 | SSL_CTX * initial_ctx; /* initial ctx, used to store sessions */ |
1205 | #define session_ctx initial_ctx | ||
1195 | 1206 | ||
1196 | /* Next protocol negotiation. For the client, this is the protocol that | 1207 | /* Next protocol negotiation. For the client, this is the protocol that |
1197 | * we sent in NextProtocol and is set when handling ServerHello | 1208 | * we sent in NextProtocol and is set when handling ServerHello |
@@ -1203,8 +1214,6 @@ struct ssl_st { | |||
1203 | unsigned char *next_proto_negotiated; | 1214 | unsigned char *next_proto_negotiated; |
1204 | unsigned char next_proto_negotiated_len; | 1215 | unsigned char next_proto_negotiated_len; |
1205 | 1216 | ||
1206 | #define session_ctx initial_ctx | ||
1207 | |||
1208 | STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; /* What we'll do */ | 1217 | STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; /* What we'll do */ |
1209 | SRTP_PROTECTION_PROFILE *srtp_profile; /* What's been chosen */ | 1218 | SRTP_PROTECTION_PROFILE *srtp_profile; /* What's been chosen */ |
1210 | 1219 | ||
@@ -1224,6 +1233,7 @@ struct ssl_st { | |||
1224 | * 2 if we are a server and are inside a handshake | 1233 | * 2 if we are a server and are inside a handshake |
1225 | * (i.e. not just sending a HelloRequest) */ | 1234 | * (i.e. not just sending a HelloRequest) */ |
1226 | 1235 | ||
1236 | struct ssl_internal_st *internal; | ||
1227 | }; | 1237 | }; |
1228 | 1238 | ||
1229 | #endif | 1239 | #endif |
diff --git a/src/lib/libssl/ssl3.h b/src/lib/libssl/ssl3.h index c52c0a780e..6344176105 100644 --- a/src/lib/libssl/ssl3.h +++ b/src/lib/libssl/ssl3.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl3.h,v 1.43 2016/12/30 15:10:57 jsing Exp $ */ | 1 | /* $OpenBSD: ssl3.h,v 1.44 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 | * |
@@ -359,6 +359,8 @@ typedef struct ssl3_buffer_st { | |||
359 | 359 | ||
360 | #ifndef OPENSSL_NO_SSL_INTERN | 360 | #ifndef OPENSSL_NO_SSL_INTERN |
361 | 361 | ||
362 | struct ssl3_state_internal_st; | ||
363 | |||
362 | typedef struct ssl3_state_st { | 364 | typedef struct ssl3_state_st { |
363 | long flags; | 365 | long flags; |
364 | int delay_buf_pop_ret; | 366 | int delay_buf_pop_ret; |
@@ -489,6 +491,8 @@ typedef struct ssl3_state_st { | |||
489 | */ | 491 | */ |
490 | unsigned char *alpn_selected; | 492 | unsigned char *alpn_selected; |
491 | unsigned int alpn_selected_len; | 493 | unsigned int alpn_selected_len; |
494 | |||
495 | struct ssl3_state_internal_st *internal; | ||
492 | } SSL3_STATE; | 496 | } SSL3_STATE; |
493 | 497 | ||
494 | #endif | 498 | #endif |
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 | ||
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index 5748875092..50f527aad5 100644 --- a/src/lib/libssl/ssl_locl.h +++ b/src/lib/libssl/ssl_locl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_locl.h,v 1.145 2017/01/21 04:18:18 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.146 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 | * |
@@ -372,6 +372,26 @@ __BEGIN_HIDDEN_DECLS | |||
372 | #define EXPLICIT_CHAR2_CURVE_TYPE 2 | 372 | #define EXPLICIT_CHAR2_CURVE_TYPE 2 |
373 | #define NAMED_CURVE_TYPE 3 | 373 | #define NAMED_CURVE_TYPE 3 |
374 | 374 | ||
375 | typedef struct ssl_session_internal_st { | ||
376 | |||
377 | } SSL_SESSION_INTERNAL; | ||
378 | |||
379 | typedef struct ssl_ctx_internal_st { | ||
380 | |||
381 | } SSL_CTX_INTERNAL; | ||
382 | |||
383 | typedef struct ssl_internal_st { | ||
384 | |||
385 | } SSL_INTERNAL; | ||
386 | |||
387 | typedef struct ssl3_state_internal_st { | ||
388 | |||
389 | } SSL3_STATE_INTERNAL; | ||
390 | |||
391 | typedef struct dtls1_state_internal_st { | ||
392 | |||
393 | } DTLS1_STATE_INTERNAL; | ||
394 | |||
375 | typedef struct cert_pkey_st { | 395 | typedef struct cert_pkey_st { |
376 | X509 *x509; | 396 | X509 *x509; |
377 | EVP_PKEY *privatekey; | 397 | EVP_PKEY *privatekey; |
diff --git a/src/lib/libssl/ssl_sess.c b/src/lib/libssl/ssl_sess.c index f6e2642aeb..0970633a86 100644 --- a/src/lib/libssl/ssl_sess.c +++ b/src/lib/libssl/ssl_sess.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_sess.c,v 1.53 2016/11/02 11:21:05 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_sess.c,v 1.54 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 | * |
@@ -199,10 +199,14 @@ SSL_SESSION_new(void) | |||
199 | { | 199 | { |
200 | SSL_SESSION *ss; | 200 | SSL_SESSION *ss; |
201 | 201 | ||
202 | ss = calloc(1, sizeof(SSL_SESSION)); | 202 | if ((ss = calloc(1, sizeof(*ss))) == NULL) { |
203 | if (ss == NULL) { | ||
204 | SSLerr(SSL_F_SSL_SESSION_NEW, ERR_R_MALLOC_FAILURE); | 203 | SSLerr(SSL_F_SSL_SESSION_NEW, ERR_R_MALLOC_FAILURE); |
205 | return (0); | 204 | return (NULL); |
205 | } | ||
206 | if ((ss->internal = calloc(1, sizeof(*ss->internal))) == NULL) { | ||
207 | free(ss); | ||
208 | SSLerr(SSL_F_SSL_SESSION_NEW, ERR_R_MALLOC_FAILURE); | ||
209 | return (NULL); | ||
206 | } | 210 | } |
207 | 211 | ||
208 | ss->verify_result = 1; /* avoid 0 (= X509_V_OK) just in case */ | 212 | ss->verify_result = 1; /* avoid 0 (= X509_V_OK) just in case */ |
@@ -706,6 +710,10 @@ SSL_SESSION_free(SSL_SESSION *ss) | |||
706 | free(ss->tlsext_ecpointformatlist); | 710 | free(ss->tlsext_ecpointformatlist); |
707 | ss->tlsext_ellipticcurvelist_length = 0; | 711 | ss->tlsext_ellipticcurvelist_length = 0; |
708 | free(ss->tlsext_ellipticcurvelist); | 712 | free(ss->tlsext_ellipticcurvelist); |
713 | |||
714 | explicit_bzero(ss->internal, sizeof(*ss->internal)); | ||
715 | free(ss->internal); | ||
716 | |||
709 | explicit_bzero(ss, sizeof(*ss)); | 717 | explicit_bzero(ss, sizeof(*ss)); |
710 | free(ss); | 718 | free(ss); |
711 | } | 719 | } |