diff options
-rw-r--r-- | src/lib/libssl/s3_both.c | 21 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/s3_both.c | 21 |
2 files changed, 30 insertions, 12 deletions
diff --git a/src/lib/libssl/s3_both.c b/src/lib/libssl/s3_both.c index 63fea5217d..5db0a11618 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.40 2015/07/14 03:47:38 doug Exp $ */ | 1 | /* $OpenBSD: s3_both.c,v 1.41 2015/07/14 05:41:07 doug 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 | * |
@@ -391,9 +391,11 @@ long | |||
391 | ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | 391 | ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) |
392 | { | 392 | { |
393 | unsigned char *p; | 393 | unsigned char *p; |
394 | unsigned long l; | 394 | uint32_t l; |
395 | long n; | 395 | long n; |
396 | int i, al; | 396 | int i, al; |
397 | CBS cbs; | ||
398 | uint8_t u8; | ||
397 | 399 | ||
398 | if (s->s3->tmp.reuse_message) { | 400 | if (s->s3->tmp.reuse_message) { |
399 | s->s3->tmp.reuse_message = 0; | 401 | s->s3->tmp.reuse_message = 0; |
@@ -443,8 +445,8 @@ ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | |||
443 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, p, 4, s, s->msg_callback_arg); | 445 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, p, 4, s, s->msg_callback_arg); |
444 | } | 446 | } |
445 | } | 447 | } |
446 | } | 448 | |
447 | while (skip_message); | 449 | } while (skip_message); |
448 | 450 | ||
449 | /* s->init_num == 4 */ | 451 | /* s->init_num == 4 */ |
450 | 452 | ||
@@ -453,9 +455,16 @@ ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | |||
453 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_UNEXPECTED_MESSAGE); | 455 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_UNEXPECTED_MESSAGE); |
454 | goto f_err; | 456 | goto f_err; |
455 | } | 457 | } |
456 | s->s3->tmp.message_type= *(p++); | ||
457 | 458 | ||
458 | n2l3(p, l); | 459 | /* XXX remove call to n2l3 */ |
460 | CBS_init(&cbs, p, 4); | ||
461 | if (!CBS_get_u8(&cbs, &u8) || | ||
462 | !CBS_get_u24(&cbs, &l)) { | ||
463 | SSLerr(SSL_F_SSL3_GET_MESSAGE, ERR_R_BUF_LIB); | ||
464 | goto err; | ||
465 | } | ||
466 | s->s3->tmp.message_type = u8; | ||
467 | |||
459 | if (l > (unsigned long)max) { | 468 | if (l > (unsigned long)max) { |
460 | al = SSL_AD_ILLEGAL_PARAMETER; | 469 | al = SSL_AD_ILLEGAL_PARAMETER; |
461 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_EXCESSIVE_MESSAGE_SIZE); | 470 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_EXCESSIVE_MESSAGE_SIZE); |
diff --git a/src/lib/libssl/src/ssl/s3_both.c b/src/lib/libssl/src/ssl/s3_both.c index 63fea5217d..5db0a11618 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.40 2015/07/14 03:47:38 doug Exp $ */ | 1 | /* $OpenBSD: s3_both.c,v 1.41 2015/07/14 05:41:07 doug 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 | * |
@@ -391,9 +391,11 @@ long | |||
391 | ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | 391 | ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) |
392 | { | 392 | { |
393 | unsigned char *p; | 393 | unsigned char *p; |
394 | unsigned long l; | 394 | uint32_t l; |
395 | long n; | 395 | long n; |
396 | int i, al; | 396 | int i, al; |
397 | CBS cbs; | ||
398 | uint8_t u8; | ||
397 | 399 | ||
398 | if (s->s3->tmp.reuse_message) { | 400 | if (s->s3->tmp.reuse_message) { |
399 | s->s3->tmp.reuse_message = 0; | 401 | s->s3->tmp.reuse_message = 0; |
@@ -443,8 +445,8 @@ ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | |||
443 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, p, 4, s, s->msg_callback_arg); | 445 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, p, 4, s, s->msg_callback_arg); |
444 | } | 446 | } |
445 | } | 447 | } |
446 | } | 448 | |
447 | while (skip_message); | 449 | } while (skip_message); |
448 | 450 | ||
449 | /* s->init_num == 4 */ | 451 | /* s->init_num == 4 */ |
450 | 452 | ||
@@ -453,9 +455,16 @@ ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | |||
453 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_UNEXPECTED_MESSAGE); | 455 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_UNEXPECTED_MESSAGE); |
454 | goto f_err; | 456 | goto f_err; |
455 | } | 457 | } |
456 | s->s3->tmp.message_type= *(p++); | ||
457 | 458 | ||
458 | n2l3(p, l); | 459 | /* XXX remove call to n2l3 */ |
460 | CBS_init(&cbs, p, 4); | ||
461 | if (!CBS_get_u8(&cbs, &u8) || | ||
462 | !CBS_get_u24(&cbs, &l)) { | ||
463 | SSLerr(SSL_F_SSL3_GET_MESSAGE, ERR_R_BUF_LIB); | ||
464 | goto err; | ||
465 | } | ||
466 | s->s3->tmp.message_type = u8; | ||
467 | |||
459 | if (l > (unsigned long)max) { | 468 | if (l > (unsigned long)max) { |
460 | al = SSL_AD_ILLEGAL_PARAMETER; | 469 | al = SSL_AD_ILLEGAL_PARAMETER; |
461 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_EXCESSIVE_MESSAGE_SIZE); | 470 | SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_EXCESSIVE_MESSAGE_SIZE); |