summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjsing <>2022-09-11 13:51:25 +0000
committerjsing <>2022-09-11 13:51:25 +0000
commit0e4a43263970930a73f26bc35df65ec5f1ad8166 (patch)
tree136fc3e4fd2fef6933d802abfcee8a260d95a2fb
parentc79da7df7157a30235d61ba0217edf5ceaea5f53 (diff)
downloadopenbsd-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.c11
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
762ssl3_read_change_cipher_spec(SSL *s) 762ssl3_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) {