diff options
| author | jsing <> | 2022-09-11 13:51:25 +0000 |
|---|---|---|
| committer | jsing <> | 2022-09-11 13:51:25 +0000 |
| commit | 9759eb94fea75dec5994ef12ce771d94df4c63b7 (patch) | |
| tree | 136fc3e4fd2fef6933d802abfcee8a260d95a2fb /src/lib/libssl/ssl_pkt.c | |
| parent | b0927200cf32ec6615639e84b9d31ced84f394de (diff) | |
| download | openbsd-9759eb94fea75dec5994ef12ce771d94df4c63b7.tar.gz openbsd-9759eb94fea75dec5994ef12ce771d94df4c63b7.tar.bz2 openbsd-9759eb94fea75dec5994ef12ce771d94df4c63b7.zip | |
Use CBS when procesing a CCS message in the legacy stack.
ok tb@
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) { |
