diff options
-rw-r--r-- | src/lib/libssl/t1_lib.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/lib/libssl/t1_lib.c b/src/lib/libssl/t1_lib.c index 67eabdae06..257cd0bd07 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.91 2016/10/02 21:05:44 guenther Exp $ */ | 1 | /* $OpenBSD: t1_lib.c,v 1.92 2016/10/02 21:18:08 guenther 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 | * |
@@ -2233,8 +2233,13 @@ tls_decrypt_ticket(SSL *s, const unsigned char *etick, int eticklen, | |||
2233 | eticklen -= mlen; | 2233 | eticklen -= mlen; |
2234 | 2234 | ||
2235 | /* Check HMAC of encrypted ticket */ | 2235 | /* Check HMAC of encrypted ticket */ |
2236 | HMAC_Update(&hctx, etick, eticklen); | 2236 | if (HMAC_Update(&hctx, etick, eticklen) <= 0 || |
2237 | HMAC_Final(&hctx, tick_hmac, NULL); | 2237 | HMAC_Final(&hctx, tick_hmac, NULL) <= 0) { |
2238 | HMAC_CTX_cleanup(&hctx); | ||
2239 | EVP_CIPHER_CTX_cleanup(&ctx); | ||
2240 | return -1; | ||
2241 | } | ||
2242 | |||
2238 | HMAC_CTX_cleanup(&hctx); | 2243 | HMAC_CTX_cleanup(&hctx); |
2239 | if (timingsafe_memcmp(tick_hmac, etick + eticklen, mlen)) { | 2244 | if (timingsafe_memcmp(tick_hmac, etick + eticklen, mlen)) { |
2240 | EVP_CIPHER_CTX_cleanup(&ctx); | 2245 | EVP_CIPHER_CTX_cleanup(&ctx); |
@@ -2246,11 +2251,12 @@ tls_decrypt_ticket(SSL *s, const unsigned char *etick, int eticklen, | |||
2246 | p = etick + 16 + EVP_CIPHER_CTX_iv_length(&ctx); | 2251 | p = etick + 16 + EVP_CIPHER_CTX_iv_length(&ctx); |
2247 | eticklen -= 16 + EVP_CIPHER_CTX_iv_length(&ctx); | 2252 | eticklen -= 16 + EVP_CIPHER_CTX_iv_length(&ctx); |
2248 | sdec = malloc(eticklen); | 2253 | sdec = malloc(eticklen); |
2249 | if (!sdec) { | 2254 | if (sdec == NULL || |
2255 | EVP_DecryptUpdate(&ctx, sdec, &slen, p, eticklen) <= 0) { | ||
2256 | free(sdec); | ||
2250 | EVP_CIPHER_CTX_cleanup(&ctx); | 2257 | EVP_CIPHER_CTX_cleanup(&ctx); |
2251 | return -1; | 2258 | return -1; |
2252 | } | 2259 | } |
2253 | EVP_DecryptUpdate(&ctx, sdec, &slen, p, eticklen); | ||
2254 | if (EVP_DecryptFinal_ex(&ctx, sdec + slen, &mlen) <= 0) { | 2260 | if (EVP_DecryptFinal_ex(&ctx, sdec + slen, &mlen) <= 0) { |
2255 | free(sdec); | 2261 | free(sdec); |
2256 | EVP_CIPHER_CTX_cleanup(&ctx); | 2262 | EVP_CIPHER_CTX_cleanup(&ctx); |