diff options
Diffstat (limited to 'src/lib/libssl/s3_lib.c')
-rw-r--r-- | src/lib/libssl/s3_lib.c | 18 |
1 files changed, 15 insertions, 3 deletions
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; |