diff options
author | jsing <> | 2019-01-21 01:20:11 +0000 |
---|---|---|
committer | jsing <> | 2019-01-21 01:20:11 +0000 |
commit | ee45b5205b24ef754b5fddbb35818a8cf22dbe51 (patch) | |
tree | 00690b7234ad75d1c26b36b32d6144f0e7cf87f8 /src/lib/libssl/s3_lib.c | |
parent | 67a7159e7281e14948fae6653aa91a20fef055c8 (diff) | |
download | openbsd-ee45b5205b24ef754b5fddbb35818a8cf22dbe51.tar.gz openbsd-ee45b5205b24ef754b5fddbb35818a8cf22dbe51.tar.bz2 openbsd-ee45b5205b24ef754b5fddbb35818a8cf22dbe51.zip |
Ensure we free TLS 1.3 handshake state.
There is no guarantee that ssl3_clear() is called before ssl3_free(), so
free things here. Also move the chunk in ssl3_clear() up so that it is with
the "free" code rather than the "reinit" code.
ok beck@ tb@
Diffstat (limited to 'src/lib/libssl/s3_lib.c')
-rw-r--r-- | src/lib/libssl/s3_lib.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index 0761c5b5ce..9e4998cb42 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.177 2019/01/18 12:09:52 beck Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.178 2019/01/21 01:20:11 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 | * |
@@ -1565,6 +1565,11 @@ ssl3_free(SSL *s) | |||
1565 | 1565 | ||
1566 | freezero(S3I(s)->tmp.x25519, X25519_KEY_LENGTH); | 1566 | freezero(S3I(s)->tmp.x25519, X25519_KEY_LENGTH); |
1567 | 1567 | ||
1568 | tls13_secrets_destroy(S3I(s)->hs_tls13.secrets); | ||
1569 | freezero(S3I(s)->hs_tls13.x25519_private, X25519_KEY_LENGTH); | ||
1570 | freezero(S3I(s)->hs_tls13.x25519_public, X25519_KEY_LENGTH); | ||
1571 | freezero(S3I(s)->hs_tls13.x25519_peer_public, X25519_KEY_LENGTH); | ||
1572 | |||
1568 | sk_X509_NAME_pop_free(S3I(s)->tmp.ca_names, X509_NAME_free); | 1573 | sk_X509_NAME_pop_free(S3I(s)->tmp.ca_names, X509_NAME_free); |
1569 | 1574 | ||
1570 | tls1_transcript_free(s); | 1575 | tls1_transcript_free(s); |
@@ -1596,6 +1601,11 @@ ssl3_clear(SSL *s) | |||
1596 | freezero(S3I(s)->tmp.x25519, X25519_KEY_LENGTH); | 1601 | freezero(S3I(s)->tmp.x25519, X25519_KEY_LENGTH); |
1597 | S3I(s)->tmp.x25519 = NULL; | 1602 | S3I(s)->tmp.x25519 = NULL; |
1598 | 1603 | ||
1604 | tls13_secrets_destroy(S3I(s)->hs_tls13.secrets); | ||
1605 | freezero(S3I(s)->hs_tls13.x25519_private, X25519_KEY_LENGTH); | ||
1606 | freezero(S3I(s)->hs_tls13.x25519_public, X25519_KEY_LENGTH); | ||
1607 | freezero(S3I(s)->hs_tls13.x25519_peer_public, X25519_KEY_LENGTH); | ||
1608 | |||
1599 | rp = S3I(s)->rbuf.buf; | 1609 | rp = S3I(s)->rbuf.buf; |
1600 | wp = S3I(s)->wbuf.buf; | 1610 | wp = S3I(s)->wbuf.buf; |
1601 | rlen = S3I(s)->rbuf.len; | 1611 | rlen = S3I(s)->rbuf.len; |
@@ -1627,11 +1637,6 @@ ssl3_clear(SSL *s) | |||
1627 | 1637 | ||
1628 | s->internal->packet_length = 0; | 1638 | s->internal->packet_length = 0; |
1629 | s->version = TLS1_VERSION; | 1639 | s->version = TLS1_VERSION; |
1630 | |||
1631 | tls13_secrets_destroy(S3I(s)->hs_tls13.secrets); | ||
1632 | freezero(S3I(s)->hs_tls13.x25519_private, X25519_KEY_LENGTH); | ||
1633 | freezero(S3I(s)->hs_tls13.x25519_public, X25519_KEY_LENGTH); | ||
1634 | freezero(S3I(s)->hs_tls13.x25519_peer_public, X25519_KEY_LENGTH); | ||
1635 | } | 1640 | } |
1636 | 1641 | ||
1637 | static long | 1642 | static long |