summaryrefslogtreecommitdiff
path: root/src/lib/libssl/s3_lib.c
diff options
context:
space:
mode:
authorjsing <>2019-01-21 01:20:11 +0000
committerjsing <>2019-01-21 01:20:11 +0000
commitee45b5205b24ef754b5fddbb35818a8cf22dbe51 (patch)
tree00690b7234ad75d1c26b36b32d6144f0e7cf87f8 /src/lib/libssl/s3_lib.c
parent67a7159e7281e14948fae6653aa91a20fef055c8 (diff)
downloadopenbsd-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.c17
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
1637static long 1642static long