diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libssl/ssl_pkt.c | 11 | 
1 files changed, 7 insertions, 4 deletions
diff --git a/src/lib/libssl/ssl_pkt.c b/src/lib/libssl/ssl_pkt.c index 4ec22f7d53..d9f5a0d057 100644 --- a/src/lib/libssl/ssl_pkt.c +++ b/src/lib/libssl/ssl_pkt.c  | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ssl_pkt.c,v 1.59 2022/09/10 15:37:13 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_pkt.c,v 1.60 2022/09/11 13:51:25 jsing 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 | * | 
| @@ -762,17 +762,20 @@ int | |||
| 762 | ssl3_read_change_cipher_spec(SSL *s) | 762 | ssl3_read_change_cipher_spec(SSL *s) | 
| 763 | { | 763 | { | 
| 764 | SSL3_RECORD_INTERNAL *rr = &s->s3->rrec; | 764 | SSL3_RECORD_INTERNAL *rr = &s->s3->rrec; | 
| 765 | const uint8_t ccs[] = { SSL3_MT_CCS }; | ||
| 766 | CBS cbs; | ||
| 765 | 767 | ||
| 766 | /* | 768 | /* | 
| 767 | * 'Change Cipher Spec' is just a single byte, so we know exactly what | 769 | * 'Change Cipher Spec' is just a single byte, so we know exactly what | 
| 768 | * the record payload has to look like. | 770 | * the record payload has to look like. | 
| 769 | */ | 771 | */ | 
| 770 | if (rr->length != 1 || rr->off != 0) { | 772 | CBS_init(&cbs, rr->data, rr->length); | 
| 773 | if (rr->off != 0 || CBS_len(&cbs) != sizeof(ccs)) { | ||
| 771 | SSLerror(s, SSL_R_BAD_CHANGE_CIPHER_SPEC); | 774 | SSLerror(s, SSL_R_BAD_CHANGE_CIPHER_SPEC); | 
| 772 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR); | 775 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR); | 
| 773 | return -1; | 776 | return -1; | 
| 774 | } | 777 | } | 
| 775 | if (rr->data[0] != SSL3_MT_CCS) { | 778 | if (!CBS_mem_equal(&cbs, ccs, sizeof(ccs))) { | 
| 776 | SSLerror(s, SSL_R_BAD_CHANGE_CIPHER_SPEC); | 779 | SSLerror(s, SSL_R_BAD_CHANGE_CIPHER_SPEC); | 
| 777 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER); | 780 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER); | 
| 778 | return -1; | 781 | return -1; | 
| @@ -780,7 +783,7 @@ ssl3_read_change_cipher_spec(SSL *s) | |||
| 780 | 783 | ||
| 781 | /* XDTLS: check that epoch is consistent */ | 784 | /* XDTLS: check that epoch is consistent */ | 
| 782 | 785 | ||
| 783 | ssl_msg_callback(s, 0, SSL3_RT_CHANGE_CIPHER_SPEC, rr->data, 1); | 786 | ssl_msg_callback_cbs(s, 0, SSL3_RT_CHANGE_CIPHER_SPEC, &cbs); | 
| 784 | 787 | ||
| 785 | /* Check that we have a cipher to change to. */ | 788 | /* Check that we have a cipher to change to. */ | 
| 786 | if (s->s3->hs.cipher == NULL) { | 789 | if (s->s3->hs.cipher == NULL) { | 
