diff options
author | miod <> | 2014-08-07 20:02:23 +0000 |
---|---|---|
committer | miod <> | 2014-08-07 20:02:23 +0000 |
commit | e58fb502ca02fb2bd4f85e5725abd1189d26921c (patch) | |
tree | 3edb8354ad6b2884901d930a4a6006640b51962b | |
parent | 15e8f255e119bc9bcc3d331677007d5263431e63 (diff) | |
download | openbsd-e58fb502ca02fb2bd4f85e5725abd1189d26921c.tar.gz openbsd-e58fb502ca02fb2bd4f85e5725abd1189d26921c.tar.bz2 openbsd-e58fb502ca02fb2bd4f85e5725abd1189d26921c.zip |
Oops, revert changes commited by mistake. The previous commit was supposed
to only apply to s23_srvr.c.
-rw-r--r-- | src/lib/libssl/d1_both.c | 5 | ||||
-rw-r--r-- | src/lib/libssl/d1_clnt.c | 8 | ||||
-rw-r--r-- | src/lib/libssl/d1_pkt.c | 6 | ||||
-rw-r--r-- | src/lib/libssl/s3_both.c | 21 | ||||
-rw-r--r-- | src/lib/libssl/s3_lib.c | 6 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/d1_both.c | 5 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/d1_clnt.c | 8 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/d1_pkt.c | 6 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/s3_both.c | 21 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/s3_enc.c | 6 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/s3_lib.c | 6 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/t1_enc.c | 7 | ||||
-rw-r--r-- | src/lib/libssl/t1_enc.c | 7 |
13 files changed, 59 insertions, 53 deletions
diff --git a/src/lib/libssl/d1_both.c b/src/lib/libssl/d1_both.c index 2391d52994..aec6e272bf 100644 --- a/src/lib/libssl/d1_both.c +++ b/src/lib/libssl/d1_both.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_both.c,v 1.25 2014/08/07 19:46:31 miod Exp $ */ | 1 | /* $OpenBSD: d1_both.c,v 1.26 2014/08/07 20:02:23 miod Exp $ */ |
2 | /* | 2 | /* |
3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
@@ -903,7 +903,6 @@ dtls1_send_finished(SSL *s, int a, int b, const char *sender, int slen) | |||
903 | 903 | ||
904 | i = s->method->ssl3_enc->final_finish_mac(s, sender, slen, | 904 | i = s->method->ssl3_enc->final_finish_mac(s, sender, slen, |
905 | s->s3->tmp.finish_md); | 905 | s->s3->tmp.finish_md); |
906 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | ||
907 | s->s3->tmp.finish_md_len = i; | 906 | s->s3->tmp.finish_md_len = i; |
908 | memcpy(p, s->s3->tmp.finish_md, i); | 907 | memcpy(p, s->s3->tmp.finish_md, i); |
909 | p += i; | 908 | p += i; |
@@ -914,10 +913,12 @@ dtls1_send_finished(SSL *s, int a, int b, const char *sender, int slen) | |||
914 | * renegotiation checks | 913 | * renegotiation checks |
915 | */ | 914 | */ |
916 | if (s->type == SSL_ST_CONNECT) { | 915 | if (s->type == SSL_ST_CONNECT) { |
916 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | ||
917 | memcpy(s->s3->previous_client_finished, | 917 | memcpy(s->s3->previous_client_finished, |
918 | s->s3->tmp.finish_md, i); | 918 | s->s3->tmp.finish_md, i); |
919 | s->s3->previous_client_finished_len = i; | 919 | s->s3->previous_client_finished_len = i; |
920 | } else { | 920 | } else { |
921 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | ||
921 | memcpy(s->s3->previous_server_finished, | 922 | memcpy(s->s3->previous_server_finished, |
922 | s->s3->tmp.finish_md, i); | 923 | s->s3->tmp.finish_md, i); |
923 | s->s3->previous_server_finished_len = i; | 924 | s->s3->previous_server_finished_len = i; |
diff --git a/src/lib/libssl/d1_clnt.c b/src/lib/libssl/d1_clnt.c index 165f9441f6..c9ec32173b 100644 --- a/src/lib/libssl/d1_clnt.c +++ b/src/lib/libssl/d1_clnt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_clnt.c,v 1.32 2014/08/07 19:46:31 miod Exp $ */ | 1 | /* $OpenBSD: d1_clnt.c,v 1.33 2014/08/07 20:02:23 miod Exp $ */ |
2 | /* | 2 | /* |
3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
@@ -778,9 +778,8 @@ dtls1_client_hello(SSL *s) | |||
778 | 778 | ||
779 | /* if client_random is initialized, reuse it, we are | 779 | /* if client_random is initialized, reuse it, we are |
780 | * required to use same upon reply to HelloVerify */ | 780 | * required to use same upon reply to HelloVerify */ |
781 | for (i = 0; i < sizeof(s->s3->client_random); i++) | 781 | for (i = 0; p[i]=='\0' && i < sizeof(s->s3->client_random); i++) |
782 | if (p[i] != '\0') | 782 | ; |
783 | break; | ||
784 | if (i == sizeof(s->s3->client_random)) | 783 | if (i == sizeof(s->s3->client_random)) |
785 | RAND_pseudo_bytes(p, sizeof(s->s3->client_random)); | 784 | RAND_pseudo_bytes(p, sizeof(s->s3->client_random)); |
786 | 785 | ||
@@ -1339,6 +1338,7 @@ dtls1_send_client_certificate(SSL *s) | |||
1339 | /* If we get an error, we need to | 1338 | /* If we get an error, we need to |
1340 | * ssl->rwstate=SSL_X509_LOOKUP; return(-1); | 1339 | * ssl->rwstate=SSL_X509_LOOKUP; return(-1); |
1341 | * We then get retied later */ | 1340 | * We then get retied later */ |
1341 | i = 0; | ||
1342 | i = ssl_do_client_cert_cb(s, &x509, &pkey); | 1342 | i = ssl_do_client_cert_cb(s, &x509, &pkey); |
1343 | if (i < 0) { | 1343 | if (i < 0) { |
1344 | s->rwstate = SSL_X509_LOOKUP; | 1344 | s->rwstate = SSL_X509_LOOKUP; |
diff --git a/src/lib/libssl/d1_pkt.c b/src/lib/libssl/d1_pkt.c index 5be89f0955..7b0d67bf15 100644 --- a/src/lib/libssl/d1_pkt.c +++ b/src/lib/libssl/d1_pkt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_pkt.c,v 1.33 2014/08/07 19:46:31 miod Exp $ */ | 1 | /* $OpenBSD: d1_pkt.c,v 1.34 2014/08/07 20:02:23 miod Exp $ */ |
2 | /* | 2 | /* |
3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
@@ -414,12 +414,10 @@ dtls1_process_record(SSL *s) | |||
414 | } | 414 | } |
415 | 415 | ||
416 | i = s->method->ssl3_enc->mac(s, md, 0 /* not send */); | 416 | i = s->method->ssl3_enc->mac(s, md, 0 /* not send */); |
417 | if (i < 0 || mac == NULL || | 417 | if (i < 0 || mac == NULL || timingsafe_memcmp(md, mac, (size_t)mac_size) != 0) |
418 | timingsafe_memcmp(md, mac, (size_t)mac_size) != 0) | ||
419 | enc_err = -1; | 418 | enc_err = -1; |
420 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH + mac_size) | 419 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH + mac_size) |
421 | enc_err = -1; | 420 | enc_err = -1; |
422 | OPENSSL_cleanse(&md, sizeof md); | ||
423 | } | 421 | } |
424 | 422 | ||
425 | if (enc_err < 0) { | 423 | if (enc_err < 0) { |
diff --git a/src/lib/libssl/s3_both.c b/src/lib/libssl/s3_both.c index afcaca3c43..6ba3d4bfce 100644 --- a/src/lib/libssl/s3_both.c +++ b/src/lib/libssl/s3_both.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_both.c,v 1.27 2014/08/07 19:46:31 miod Exp $ */ | 1 | /* $OpenBSD: s3_both.c,v 1.28 2014/08/07 20:02:23 miod 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 | * |
@@ -161,7 +161,7 @@ ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen) | |||
161 | p = &(d[4]); | 161 | p = &(d[4]); |
162 | 162 | ||
163 | i = s->method->ssl3_enc->final_finish_mac(s, | 163 | i = s->method->ssl3_enc->final_finish_mac(s, |
164 | sender, slen, s->s3->tmp.finish_md); | 164 | sender, slen, s->s3->tmp.finish_md); |
165 | if (i == 0) | 165 | if (i == 0) |
166 | return 0; | 166 | return 0; |
167 | s->s3->tmp.finish_md_len = i; | 167 | s->s3->tmp.finish_md_len = i; |
@@ -171,14 +171,15 @@ ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen) | |||
171 | 171 | ||
172 | /* Copy the finished so we can use it for | 172 | /* Copy the finished so we can use it for |
173 | renegotiation checks */ | 173 | renegotiation checks */ |
174 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | ||
175 | if (s->type == SSL_ST_CONNECT) { | 174 | if (s->type == SSL_ST_CONNECT) { |
175 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | ||
176 | memcpy(s->s3->previous_client_finished, | 176 | memcpy(s->s3->previous_client_finished, |
177 | s->s3->tmp.finish_md, i); | 177 | s->s3->tmp.finish_md, i); |
178 | s->s3->previous_client_finished_len = i; | 178 | s->s3->previous_client_finished_len = i; |
179 | } else { | 179 | } else { |
180 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | ||
180 | memcpy(s->s3->previous_server_finished, | 181 | memcpy(s->s3->previous_server_finished, |
181 | s->s3->tmp.finish_md, i); | 182 | s->s3->tmp.finish_md, i); |
182 | s->s3->previous_server_finished_len = i; | 183 | s->s3->previous_server_finished_len = i; |
183 | } | 184 | } |
184 | 185 | ||
@@ -215,7 +216,7 @@ ssl3_take_mac(SSL *s) | |||
215 | } | 216 | } |
216 | 217 | ||
217 | s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s, | 218 | s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s, |
218 | sender, slen, s->s3->tmp.peer_finish_md); | 219 | sender, slen, s->s3->tmp.peer_finish_md); |
219 | } | 220 | } |
220 | #endif | 221 | #endif |
221 | 222 | ||
@@ -249,7 +250,7 @@ ssl3_get_finished(SSL *s, int a, int b) | |||
249 | p = (unsigned char *)s->init_msg; | 250 | p = (unsigned char *)s->init_msg; |
250 | i = s->s3->tmp.peer_finish_md_len; | 251 | i = s->s3->tmp.peer_finish_md_len; |
251 | 252 | ||
252 | if (i != n || i > EVP_MAX_MD_SIZE) { | 253 | if (i != n) { |
253 | al = SSL_AD_DECODE_ERROR; | 254 | al = SSL_AD_DECODE_ERROR; |
254 | SSLerr(SSL_F_SSL3_GET_FINISHED, SSL_R_BAD_DIGEST_LENGTH); | 255 | SSLerr(SSL_F_SSL3_GET_FINISHED, SSL_R_BAD_DIGEST_LENGTH); |
255 | goto f_err; | 256 | goto f_err; |
@@ -264,12 +265,14 @@ ssl3_get_finished(SSL *s, int a, int b) | |||
264 | /* Copy the finished so we can use it for | 265 | /* Copy the finished so we can use it for |
265 | renegotiation checks */ | 266 | renegotiation checks */ |
266 | if (s->type == SSL_ST_ACCEPT) { | 267 | if (s->type == SSL_ST_ACCEPT) { |
268 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | ||
267 | memcpy(s->s3->previous_client_finished, | 269 | memcpy(s->s3->previous_client_finished, |
268 | s->s3->tmp.peer_finish_md, i); | 270 | s->s3->tmp.peer_finish_md, i); |
269 | s->s3->previous_client_finished_len = i; | 271 | s->s3->previous_client_finished_len = i; |
270 | } else { | 272 | } else { |
273 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | ||
271 | memcpy(s->s3->previous_server_finished, | 274 | memcpy(s->s3->previous_server_finished, |
272 | s->s3->tmp.peer_finish_md, i); | 275 | s->s3->tmp.peer_finish_md, i); |
273 | s->s3->previous_server_finished_len = i; | 276 | s->s3->previous_server_finished_len = i; |
274 | } | 277 | } |
275 | 278 | ||
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index aa091f51c7..4631c517cc 100644 --- a/src/lib/libssl/s3_lib.c +++ b/src/lib/libssl/s3_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_lib.c,v 1.72 2014/08/07 19:46:31 miod Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.73 2014/08/07 20:02:23 miod 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 | * |
@@ -2333,7 +2333,7 @@ ssl3_new(SSL *s) | |||
2333 | SSL3_STATE *s3; | 2333 | SSL3_STATE *s3; |
2334 | 2334 | ||
2335 | if ((s3 = calloc(1, sizeof *s3)) == NULL) | 2335 | if ((s3 = calloc(1, sizeof *s3)) == NULL) |
2336 | return 0; | 2336 | goto err; |
2337 | memset(s3->rrec.seq_num, 0, sizeof(s3->rrec.seq_num)); | 2337 | memset(s3->rrec.seq_num, 0, sizeof(s3->rrec.seq_num)); |
2338 | memset(s3->wrec.seq_num, 0, sizeof(s3->wrec.seq_num)); | 2338 | memset(s3->wrec.seq_num, 0, sizeof(s3->wrec.seq_num)); |
2339 | 2339 | ||
@@ -2341,6 +2341,8 @@ ssl3_new(SSL *s) | |||
2341 | 2341 | ||
2342 | s->method->ssl_clear(s); | 2342 | s->method->ssl_clear(s); |
2343 | return (1); | 2343 | return (1); |
2344 | err: | ||
2345 | return (0); | ||
2344 | } | 2346 | } |
2345 | 2347 | ||
2346 | void | 2348 | void |
diff --git a/src/lib/libssl/src/ssl/d1_both.c b/src/lib/libssl/src/ssl/d1_both.c index 2391d52994..aec6e272bf 100644 --- a/src/lib/libssl/src/ssl/d1_both.c +++ b/src/lib/libssl/src/ssl/d1_both.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_both.c,v 1.25 2014/08/07 19:46:31 miod Exp $ */ | 1 | /* $OpenBSD: d1_both.c,v 1.26 2014/08/07 20:02:23 miod Exp $ */ |
2 | /* | 2 | /* |
3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
@@ -903,7 +903,6 @@ dtls1_send_finished(SSL *s, int a, int b, const char *sender, int slen) | |||
903 | 903 | ||
904 | i = s->method->ssl3_enc->final_finish_mac(s, sender, slen, | 904 | i = s->method->ssl3_enc->final_finish_mac(s, sender, slen, |
905 | s->s3->tmp.finish_md); | 905 | s->s3->tmp.finish_md); |
906 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | ||
907 | s->s3->tmp.finish_md_len = i; | 906 | s->s3->tmp.finish_md_len = i; |
908 | memcpy(p, s->s3->tmp.finish_md, i); | 907 | memcpy(p, s->s3->tmp.finish_md, i); |
909 | p += i; | 908 | p += i; |
@@ -914,10 +913,12 @@ dtls1_send_finished(SSL *s, int a, int b, const char *sender, int slen) | |||
914 | * renegotiation checks | 913 | * renegotiation checks |
915 | */ | 914 | */ |
916 | if (s->type == SSL_ST_CONNECT) { | 915 | if (s->type == SSL_ST_CONNECT) { |
916 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | ||
917 | memcpy(s->s3->previous_client_finished, | 917 | memcpy(s->s3->previous_client_finished, |
918 | s->s3->tmp.finish_md, i); | 918 | s->s3->tmp.finish_md, i); |
919 | s->s3->previous_client_finished_len = i; | 919 | s->s3->previous_client_finished_len = i; |
920 | } else { | 920 | } else { |
921 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | ||
921 | memcpy(s->s3->previous_server_finished, | 922 | memcpy(s->s3->previous_server_finished, |
922 | s->s3->tmp.finish_md, i); | 923 | s->s3->tmp.finish_md, i); |
923 | s->s3->previous_server_finished_len = i; | 924 | s->s3->previous_server_finished_len = i; |
diff --git a/src/lib/libssl/src/ssl/d1_clnt.c b/src/lib/libssl/src/ssl/d1_clnt.c index 165f9441f6..c9ec32173b 100644 --- a/src/lib/libssl/src/ssl/d1_clnt.c +++ b/src/lib/libssl/src/ssl/d1_clnt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_clnt.c,v 1.32 2014/08/07 19:46:31 miod Exp $ */ | 1 | /* $OpenBSD: d1_clnt.c,v 1.33 2014/08/07 20:02:23 miod Exp $ */ |
2 | /* | 2 | /* |
3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
@@ -778,9 +778,8 @@ dtls1_client_hello(SSL *s) | |||
778 | 778 | ||
779 | /* if client_random is initialized, reuse it, we are | 779 | /* if client_random is initialized, reuse it, we are |
780 | * required to use same upon reply to HelloVerify */ | 780 | * required to use same upon reply to HelloVerify */ |
781 | for (i = 0; i < sizeof(s->s3->client_random); i++) | 781 | for (i = 0; p[i]=='\0' && i < sizeof(s->s3->client_random); i++) |
782 | if (p[i] != '\0') | 782 | ; |
783 | break; | ||
784 | if (i == sizeof(s->s3->client_random)) | 783 | if (i == sizeof(s->s3->client_random)) |
785 | RAND_pseudo_bytes(p, sizeof(s->s3->client_random)); | 784 | RAND_pseudo_bytes(p, sizeof(s->s3->client_random)); |
786 | 785 | ||
@@ -1339,6 +1338,7 @@ dtls1_send_client_certificate(SSL *s) | |||
1339 | /* If we get an error, we need to | 1338 | /* If we get an error, we need to |
1340 | * ssl->rwstate=SSL_X509_LOOKUP; return(-1); | 1339 | * ssl->rwstate=SSL_X509_LOOKUP; return(-1); |
1341 | * We then get retied later */ | 1340 | * We then get retied later */ |
1341 | i = 0; | ||
1342 | i = ssl_do_client_cert_cb(s, &x509, &pkey); | 1342 | i = ssl_do_client_cert_cb(s, &x509, &pkey); |
1343 | if (i < 0) { | 1343 | if (i < 0) { |
1344 | s->rwstate = SSL_X509_LOOKUP; | 1344 | s->rwstate = SSL_X509_LOOKUP; |
diff --git a/src/lib/libssl/src/ssl/d1_pkt.c b/src/lib/libssl/src/ssl/d1_pkt.c index 5be89f0955..7b0d67bf15 100644 --- a/src/lib/libssl/src/ssl/d1_pkt.c +++ b/src/lib/libssl/src/ssl/d1_pkt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_pkt.c,v 1.33 2014/08/07 19:46:31 miod Exp $ */ | 1 | /* $OpenBSD: d1_pkt.c,v 1.34 2014/08/07 20:02:23 miod Exp $ */ |
2 | /* | 2 | /* |
3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
@@ -414,12 +414,10 @@ dtls1_process_record(SSL *s) | |||
414 | } | 414 | } |
415 | 415 | ||
416 | i = s->method->ssl3_enc->mac(s, md, 0 /* not send */); | 416 | i = s->method->ssl3_enc->mac(s, md, 0 /* not send */); |
417 | if (i < 0 || mac == NULL || | 417 | if (i < 0 || mac == NULL || timingsafe_memcmp(md, mac, (size_t)mac_size) != 0) |
418 | timingsafe_memcmp(md, mac, (size_t)mac_size) != 0) | ||
419 | enc_err = -1; | 418 | enc_err = -1; |
420 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH + mac_size) | 419 | if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH + mac_size) |
421 | enc_err = -1; | 420 | enc_err = -1; |
422 | OPENSSL_cleanse(&md, sizeof md); | ||
423 | } | 421 | } |
424 | 422 | ||
425 | if (enc_err < 0) { | 423 | if (enc_err < 0) { |
diff --git a/src/lib/libssl/src/ssl/s3_both.c b/src/lib/libssl/src/ssl/s3_both.c index afcaca3c43..6ba3d4bfce 100644 --- a/src/lib/libssl/src/ssl/s3_both.c +++ b/src/lib/libssl/src/ssl/s3_both.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_both.c,v 1.27 2014/08/07 19:46:31 miod Exp $ */ | 1 | /* $OpenBSD: s3_both.c,v 1.28 2014/08/07 20:02:23 miod 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 | * |
@@ -161,7 +161,7 @@ ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen) | |||
161 | p = &(d[4]); | 161 | p = &(d[4]); |
162 | 162 | ||
163 | i = s->method->ssl3_enc->final_finish_mac(s, | 163 | i = s->method->ssl3_enc->final_finish_mac(s, |
164 | sender, slen, s->s3->tmp.finish_md); | 164 | sender, slen, s->s3->tmp.finish_md); |
165 | if (i == 0) | 165 | if (i == 0) |
166 | return 0; | 166 | return 0; |
167 | s->s3->tmp.finish_md_len = i; | 167 | s->s3->tmp.finish_md_len = i; |
@@ -171,14 +171,15 @@ ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen) | |||
171 | 171 | ||
172 | /* Copy the finished so we can use it for | 172 | /* Copy the finished so we can use it for |
173 | renegotiation checks */ | 173 | renegotiation checks */ |
174 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | ||
175 | if (s->type == SSL_ST_CONNECT) { | 174 | if (s->type == SSL_ST_CONNECT) { |
175 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | ||
176 | memcpy(s->s3->previous_client_finished, | 176 | memcpy(s->s3->previous_client_finished, |
177 | s->s3->tmp.finish_md, i); | 177 | s->s3->tmp.finish_md, i); |
178 | s->s3->previous_client_finished_len = i; | 178 | s->s3->previous_client_finished_len = i; |
179 | } else { | 179 | } else { |
180 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | ||
180 | memcpy(s->s3->previous_server_finished, | 181 | memcpy(s->s3->previous_server_finished, |
181 | s->s3->tmp.finish_md, i); | 182 | s->s3->tmp.finish_md, i); |
182 | s->s3->previous_server_finished_len = i; | 183 | s->s3->previous_server_finished_len = i; |
183 | } | 184 | } |
184 | 185 | ||
@@ -215,7 +216,7 @@ ssl3_take_mac(SSL *s) | |||
215 | } | 216 | } |
216 | 217 | ||
217 | s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s, | 218 | s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s, |
218 | sender, slen, s->s3->tmp.peer_finish_md); | 219 | sender, slen, s->s3->tmp.peer_finish_md); |
219 | } | 220 | } |
220 | #endif | 221 | #endif |
221 | 222 | ||
@@ -249,7 +250,7 @@ ssl3_get_finished(SSL *s, int a, int b) | |||
249 | p = (unsigned char *)s->init_msg; | 250 | p = (unsigned char *)s->init_msg; |
250 | i = s->s3->tmp.peer_finish_md_len; | 251 | i = s->s3->tmp.peer_finish_md_len; |
251 | 252 | ||
252 | if (i != n || i > EVP_MAX_MD_SIZE) { | 253 | if (i != n) { |
253 | al = SSL_AD_DECODE_ERROR; | 254 | al = SSL_AD_DECODE_ERROR; |
254 | SSLerr(SSL_F_SSL3_GET_FINISHED, SSL_R_BAD_DIGEST_LENGTH); | 255 | SSLerr(SSL_F_SSL3_GET_FINISHED, SSL_R_BAD_DIGEST_LENGTH); |
255 | goto f_err; | 256 | goto f_err; |
@@ -264,12 +265,14 @@ ssl3_get_finished(SSL *s, int a, int b) | |||
264 | /* Copy the finished so we can use it for | 265 | /* Copy the finished so we can use it for |
265 | renegotiation checks */ | 266 | renegotiation checks */ |
266 | if (s->type == SSL_ST_ACCEPT) { | 267 | if (s->type == SSL_ST_ACCEPT) { |
268 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | ||
267 | memcpy(s->s3->previous_client_finished, | 269 | memcpy(s->s3->previous_client_finished, |
268 | s->s3->tmp.peer_finish_md, i); | 270 | s->s3->tmp.peer_finish_md, i); |
269 | s->s3->previous_client_finished_len = i; | 271 | s->s3->previous_client_finished_len = i; |
270 | } else { | 272 | } else { |
273 | OPENSSL_assert(i <= EVP_MAX_MD_SIZE); | ||
271 | memcpy(s->s3->previous_server_finished, | 274 | memcpy(s->s3->previous_server_finished, |
272 | s->s3->tmp.peer_finish_md, i); | 275 | s->s3->tmp.peer_finish_md, i); |
273 | s->s3->previous_server_finished_len = i; | 276 | s->s3->previous_server_finished_len = i; |
274 | } | 277 | } |
275 | 278 | ||
diff --git a/src/lib/libssl/src/ssl/s3_enc.c b/src/lib/libssl/src/ssl/s3_enc.c index 913a256f28..f268a2a265 100644 --- a/src/lib/libssl/src/ssl/s3_enc.c +++ b/src/lib/libssl/src/ssl/s3_enc.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_enc.c,v 1.53 2014/08/07 19:46:31 miod Exp $ */ | 1 | /* $OpenBSD: s3_enc.c,v 1.54 2014/08/07 20:02:23 miod 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 | * |
@@ -607,7 +607,7 @@ ssl3_handshake_mac(SSL *s, int md_nid, const char *sender, int len, | |||
607 | if (!EVP_MD_CTX_copy_ex(&ctx, d)) | 607 | if (!EVP_MD_CTX_copy_ex(&ctx, d)) |
608 | return 0; | 608 | return 0; |
609 | n = EVP_MD_CTX_size(&ctx); | 609 | n = EVP_MD_CTX_size(&ctx); |
610 | if (n <= 0) | 610 | if (n < 0) |
611 | return 0; | 611 | return 0; |
612 | 612 | ||
613 | npad = (48 / n) * n; | 613 | npad = (48 / n) * n; |
@@ -655,7 +655,7 @@ n_ssl3_mac(SSL *ssl, unsigned char *md, int send) | |||
655 | } | 655 | } |
656 | 656 | ||
657 | t = EVP_MD_CTX_size(hash); | 657 | t = EVP_MD_CTX_size(hash); |
658 | if (t <= 0) | 658 | if (t < 0) |
659 | return -1; | 659 | return -1; |
660 | md_size = t; | 660 | md_size = t; |
661 | npad = (48 / md_size) * md_size; | 661 | npad = (48 / md_size) * md_size; |
diff --git a/src/lib/libssl/src/ssl/s3_lib.c b/src/lib/libssl/src/ssl/s3_lib.c index aa091f51c7..4631c517cc 100644 --- a/src/lib/libssl/src/ssl/s3_lib.c +++ b/src/lib/libssl/src/ssl/s3_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_lib.c,v 1.72 2014/08/07 19:46:31 miod Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.73 2014/08/07 20:02:23 miod 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 | * |
@@ -2333,7 +2333,7 @@ ssl3_new(SSL *s) | |||
2333 | SSL3_STATE *s3; | 2333 | SSL3_STATE *s3; |
2334 | 2334 | ||
2335 | if ((s3 = calloc(1, sizeof *s3)) == NULL) | 2335 | if ((s3 = calloc(1, sizeof *s3)) == NULL) |
2336 | return 0; | 2336 | goto err; |
2337 | memset(s3->rrec.seq_num, 0, sizeof(s3->rrec.seq_num)); | 2337 | memset(s3->rrec.seq_num, 0, sizeof(s3->rrec.seq_num)); |
2338 | memset(s3->wrec.seq_num, 0, sizeof(s3->wrec.seq_num)); | 2338 | memset(s3->wrec.seq_num, 0, sizeof(s3->wrec.seq_num)); |
2339 | 2339 | ||
@@ -2341,6 +2341,8 @@ ssl3_new(SSL *s) | |||
2341 | 2341 | ||
2342 | s->method->ssl_clear(s); | 2342 | s->method->ssl_clear(s); |
2343 | return (1); | 2343 | return (1); |
2344 | err: | ||
2345 | return (0); | ||
2344 | } | 2346 | } |
2345 | 2347 | ||
2346 | void | 2348 | void |
diff --git a/src/lib/libssl/src/ssl/t1_enc.c b/src/lib/libssl/src/ssl/t1_enc.c index bec8328269..6ad721bd8a 100644 --- a/src/lib/libssl/src/ssl/t1_enc.c +++ b/src/lib/libssl/src/ssl/t1_enc.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: t1_enc.c,v 1.68 2014/08/07 19:46:31 miod Exp $ */ | 1 | /* $OpenBSD: t1_enc.c,v 1.69 2014/08/07 20:02:23 miod 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 | * |
@@ -319,7 +319,7 @@ tls1_aead_ctx_init(SSL_AEAD_CTX **aead_ctx) | |||
319 | 319 | ||
320 | static int | 320 | static int |
321 | tls1_change_cipher_state_aead(SSL *s, char is_read, const unsigned char *key, | 321 | tls1_change_cipher_state_aead(SSL *s, char is_read, const unsigned char *key, |
322 | unsigned int key_len, const unsigned char *iv, unsigned int iv_len) | 322 | unsigned key_len, const unsigned char *iv, unsigned iv_len) |
323 | { | 323 | { |
324 | const EVP_AEAD *aead = s->s3->tmp.new_aead; | 324 | const EVP_AEAD *aead = s->s3->tmp.new_aead; |
325 | SSL_AEAD_CTX *aead_ctx; | 325 | SSL_AEAD_CTX *aead_ctx; |
@@ -856,7 +856,6 @@ tls1_enc(SSL *s, int send) | |||
856 | rec->length += pad; | 856 | rec->length += pad; |
857 | } | 857 | } |
858 | } else if ((bs != 1) && send) { | 858 | } else if ((bs != 1) && send) { |
859 | /* XXX divide by zero if bs == 0 (should not happen) */ | ||
860 | i = bs - ((int)l % bs); | 859 | i = bs - ((int)l % bs); |
861 | 860 | ||
862 | /* Add weird padding of upto 256 bytes */ | 861 | /* Add weird padding of upto 256 bytes */ |
@@ -1121,7 +1120,7 @@ tls1_export_keying_material(SSL *s, unsigned char *out, size_t olen, | |||
1121 | currentvalpos++; | 1120 | currentvalpos++; |
1122 | val[currentvalpos] = contextlen & 0xff; | 1121 | val[currentvalpos] = contextlen & 0xff; |
1123 | currentvalpos++; | 1122 | currentvalpos++; |
1124 | if (contextlen != 0 && context != NULL) { | 1123 | if ((contextlen > 0) || (context != NULL)) { |
1125 | memcpy(val + currentvalpos, context, contextlen); | 1124 | memcpy(val + currentvalpos, context, contextlen); |
1126 | } | 1125 | } |
1127 | } | 1126 | } |
diff --git a/src/lib/libssl/t1_enc.c b/src/lib/libssl/t1_enc.c index bec8328269..6ad721bd8a 100644 --- a/src/lib/libssl/t1_enc.c +++ b/src/lib/libssl/t1_enc.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: t1_enc.c,v 1.68 2014/08/07 19:46:31 miod Exp $ */ | 1 | /* $OpenBSD: t1_enc.c,v 1.69 2014/08/07 20:02:23 miod 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 | * |
@@ -319,7 +319,7 @@ tls1_aead_ctx_init(SSL_AEAD_CTX **aead_ctx) | |||
319 | 319 | ||
320 | static int | 320 | static int |
321 | tls1_change_cipher_state_aead(SSL *s, char is_read, const unsigned char *key, | 321 | tls1_change_cipher_state_aead(SSL *s, char is_read, const unsigned char *key, |
322 | unsigned int key_len, const unsigned char *iv, unsigned int iv_len) | 322 | unsigned key_len, const unsigned char *iv, unsigned iv_len) |
323 | { | 323 | { |
324 | const EVP_AEAD *aead = s->s3->tmp.new_aead; | 324 | const EVP_AEAD *aead = s->s3->tmp.new_aead; |
325 | SSL_AEAD_CTX *aead_ctx; | 325 | SSL_AEAD_CTX *aead_ctx; |
@@ -856,7 +856,6 @@ tls1_enc(SSL *s, int send) | |||
856 | rec->length += pad; | 856 | rec->length += pad; |
857 | } | 857 | } |
858 | } else if ((bs != 1) && send) { | 858 | } else if ((bs != 1) && send) { |
859 | /* XXX divide by zero if bs == 0 (should not happen) */ | ||
860 | i = bs - ((int)l % bs); | 859 | i = bs - ((int)l % bs); |
861 | 860 | ||
862 | /* Add weird padding of upto 256 bytes */ | 861 | /* Add weird padding of upto 256 bytes */ |
@@ -1121,7 +1120,7 @@ tls1_export_keying_material(SSL *s, unsigned char *out, size_t olen, | |||
1121 | currentvalpos++; | 1120 | currentvalpos++; |
1122 | val[currentvalpos] = contextlen & 0xff; | 1121 | val[currentvalpos] = contextlen & 0xff; |
1123 | currentvalpos++; | 1122 | currentvalpos++; |
1124 | if (contextlen != 0 && context != NULL) { | 1123 | if ((contextlen > 0) || (context != NULL)) { |
1125 | memcpy(val + currentvalpos, context, contextlen); | 1124 | memcpy(val + currentvalpos, context, contextlen); |
1126 | } | 1125 | } |
1127 | } | 1126 | } |