diff options
| author | jsing <> | 2019-04-25 04:57:36 +0000 |
|---|---|---|
| committer | jsing <> | 2019-04-25 04:57:36 +0000 |
| commit | 62d48e8008432094a2d2c606b87246a30149daee (patch) | |
| tree | 027195f15fcb6ce0e5b084f27f53820eb9c01bef /src/lib/libssl/t1_lib.c | |
| parent | 43b4d32237c42ad4943c6416fac2e20cd9224e58 (diff) | |
| download | openbsd-62d48e8008432094a2d2c606b87246a30149daee.tar.gz openbsd-62d48e8008432094a2d2c606b87246a30149daee.tar.bz2 openbsd-62d48e8008432094a2d2c606b87246a30149daee.zip | |
Use calloc/freezero when allocating and freeing the session ticket data.
The decrypted session ticket contains key material.
ok tb@
Diffstat (limited to 'src/lib/libssl/t1_lib.c')
| -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); |
