summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/libssl/t1_lib.c16
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);