diff options
author | jsing <> | 2019-04-25 04:57:36 +0000 |
---|---|---|
committer | jsing <> | 2019-04-25 04:57:36 +0000 |
commit | 15c975b54284a73a7a5d10902576c0734eb5ae58 (patch) | |
tree | 027195f15fcb6ce0e5b084f27f53820eb9c01bef | |
parent | 36f65c71f38fa570364b27285824fff86fcf0460 (diff) | |
download | openbsd-15c975b54284a73a7a5d10902576c0734eb5ae58.tar.gz openbsd-15c975b54284a73a7a5d10902576c0734eb5ae58.tar.bz2 openbsd-15c975b54284a73a7a5d10902576c0734eb5ae58.zip |
Use calloc/freezero when allocating and freeing the session ticket data.
The decrypted session ticket contains key material.
ok tb@
-rw-r--r-- | src/lib/libssl/t1_lib.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/lib/libssl/t1_lib.c b/src/lib/libssl/t1_lib.c index 3cde388d6d..162cfe5ebb 100644 --- a/src/lib/libssl/t1_lib.c +++ b/src/lib/libssl/t1_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: t1_lib.c,v 1.163 2019/04/25 04:54:35 jsing Exp $ */ | 1 | /* $OpenBSD: t1_lib.c,v 1.164 2019/04/25 04:57:36 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 | * |
@@ -875,8 +875,9 @@ tls_decrypt_ticket(SSL *s, CBS *session_id, CBS *ticket, SSL_SESSION **psess) | |||
875 | { | 875 | { |
876 | CBS ticket_name, ticket_iv, ticket_encdata, ticket_hmac; | 876 | CBS ticket_name, ticket_iv, ticket_encdata, ticket_hmac; |
877 | SSL_SESSION *sess = NULL; | 877 | SSL_SESSION *sess = NULL; |
878 | size_t session_id_len; | ||
879 | unsigned char *sdec = NULL; | 878 | unsigned char *sdec = NULL; |
879 | size_t sdec_len = 0; | ||
880 | size_t session_id_len; | ||
880 | const unsigned char *p; | 881 | const unsigned char *p; |
881 | unsigned char hmac[EVP_MAX_MD_SIZE]; | 882 | unsigned char hmac[EVP_MAX_MD_SIZE]; |
882 | HMAC_CTX *hctx = NULL; | 883 | HMAC_CTX *hctx = NULL; |
@@ -978,7 +979,8 @@ tls_decrypt_ticket(SSL *s, CBS *session_id, CBS *ticket, SSL_SESSION **psess) | |||
978 | goto derr; | 979 | goto derr; |
979 | 980 | ||
980 | /* Attempt to decrypt session data. */ | 981 | /* Attempt to decrypt session data. */ |
981 | if ((sdec = malloc(CBS_len(&ticket_encdata))) == NULL) | 982 | sdec_len = CBS_len(&ticket_encdata); |
983 | if ((sdec = calloc(1, sdec_len)) == NULL) | ||
982 | goto err; | 984 | goto err; |
983 | if (EVP_DecryptUpdate(cctx, sdec, &slen, CBS_data(&ticket_encdata), | 985 | if (EVP_DecryptUpdate(cctx, sdec, &slen, CBS_data(&ticket_encdata), |
984 | CBS_len(&ticket_encdata)) <= 0) | 986 | CBS_len(&ticket_encdata)) <= 0) |
@@ -1025,7 +1027,7 @@ tls_decrypt_ticket(SSL *s, CBS *session_id, CBS *ticket, SSL_SESSION **psess) | |||
1025 | goto done; | 1027 | goto done; |
1026 | 1028 | ||
1027 | done: | 1029 | done: |
1028 | free(sdec); | 1030 | freezero(sdec, sdec_len); |
1029 | EVP_CIPHER_CTX_free(cctx); | 1031 | EVP_CIPHER_CTX_free(cctx); |
1030 | HMAC_CTX_free(hctx); | 1032 | HMAC_CTX_free(hctx); |
1031 | SSL_SESSION_free(sess); | 1033 | SSL_SESSION_free(sess); |