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