Skip to content

Commit 0294b2b

Browse files
committed
Check EVP errors for handshake digests.
Partial mitigation of PR#3200
1 parent f1068a1 commit 0294b2b

File tree

3 files changed

+15
-6
lines changed

3 files changed

+15
-6
lines changed

ssl/s3_both.c

+2
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,8 @@ int ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen)
161161

162162
i=s->method->ssl3_enc->final_finish_mac(s,
163163
sender,slen,s->s3->tmp.finish_md);
164+
if (i == 0)
165+
return 0;
164166
s->s3->tmp.finish_md_len = i;
165167
memcpy(p, s->s3->tmp.finish_md, i);
166168
p+=i;

ssl/s3_pkt.c

+7-1
Original file line numberDiff line numberDiff line change
@@ -1459,8 +1459,14 @@ int ssl3_do_change_cipher_spec(SSL *s)
14591459
slen=s->method->ssl3_enc->client_finished_label_len;
14601460
}
14611461

1462-
s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s,
1462+
i = s->method->ssl3_enc->final_finish_mac(s,
14631463
sender,slen,s->s3->tmp.peer_finish_md);
1464+
if (i == 0)
1465+
{
1466+
SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC, ERR_R_INTERNAL_ERROR);
1467+
return 0;
1468+
}
1469+
s->s3->tmp.peer_finish_md_len = i;
14641470

14651471
return(1);
14661472
}

ssl/t1_enc.c

+6-5
Original file line numberDiff line numberDiff line change
@@ -915,18 +915,19 @@ int tls1_final_finish_mac(SSL *s,
915915
if (mask & ssl_get_algorithm2(s))
916916
{
917917
int hashsize = EVP_MD_size(md);
918-
if (hashsize < 0 || hashsize > (int)(sizeof buf - (size_t)(q-buf)))
918+
EVP_MD_CTX *hdgst = s->s3->handshake_dgst[idx];
919+
if (!hdgst || hashsize < 0 || hashsize > (int)(sizeof buf - (size_t)(q-buf)))
919920
{
920921
/* internal error: 'buf' is too small for this cipersuite! */
921922
err = 1;
922923
}
923924
else
924925
{
925-
EVP_MD_CTX_copy_ex(&ctx,s->s3->handshake_dgst[idx]);
926-
EVP_DigestFinal_ex(&ctx,q,&i);
927-
if (i != (unsigned int)hashsize) /* can't really happen */
926+
if (!EVP_MD_CTX_copy_ex(&ctx, hdgst) ||
927+
!EVP_DigestFinal_ex(&ctx,q,&i) ||
928+
(i != (unsigned int)hashsize))
928929
err = 1;
929-
q+=i;
930+
q+=hashsize;
930931
}
931932
}
932933
}

0 commit comments

Comments
 (0)