summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjsing <>2020-05-11 18:08:11 +0000
committerjsing <>2020-05-11 18:08:11 +0000
commitb533040a570f1fe902202c032531870f58ad4453 (patch)
treedbb27561139b82aa9e5d608eacbc8c9224b46124
parent825d508a4b688821e99561b72a842c81c93b84a5 (diff)
downloadopenbsd-b533040a570f1fe902202c032531870f58ad4453.tar.gz
openbsd-b533040a570f1fe902202c032531870f58ad4453.tar.bz2
openbsd-b533040a570f1fe902202c032531870f58ad4453.zip
Propagate record overflows to the record layer and alert.
ok beck@ tb@
-rw-r--r--src/lib/libssl/tls13_internal.h3
-rw-r--r--src/lib/libssl/tls13_record.c5
-rw-r--r--src/lib/libssl/tls13_record_layer.c6
3 files changed, 8 insertions, 6 deletions
diff --git a/src/lib/libssl/tls13_internal.h b/src/lib/libssl/tls13_internal.h
index d35610e179..5ea09db8a0 100644
--- a/src/lib/libssl/tls13_internal.h
+++ b/src/lib/libssl/tls13_internal.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_internal.h,v 1.78 2020/05/11 18:03:51 jsing Exp $ */ 1/* $OpenBSD: tls13_internal.h,v 1.79 2020/05/11 18:08:11 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2018 Bob Beck <beck@openbsd.org> 3 * Copyright (c) 2018 Bob Beck <beck@openbsd.org>
4 * Copyright (c) 2018 Theo Buehler <tb@openbsd.org> 4 * Copyright (c) 2018 Theo Buehler <tb@openbsd.org>
@@ -39,6 +39,7 @@ __BEGIN_HIDDEN_DECLS
39#define TLS13_IO_WANT_RETRY -5 /* Retry the previous call immediately. */ 39#define TLS13_IO_WANT_RETRY -5 /* Retry the previous call immediately. */
40#define TLS13_IO_USE_LEGACY -6 40#define TLS13_IO_USE_LEGACY -6
41#define TLS13_IO_RECORD_VERSION -7 41#define TLS13_IO_RECORD_VERSION -7
42#define TLS13_IO_RECORD_OVERFLOW -8
42 43
43#define TLS13_ERR_VERIFY_FAILED 16 44#define TLS13_ERR_VERIFY_FAILED 16
44#define TLS13_ERR_HRR_FAILED 17 45#define TLS13_ERR_HRR_FAILED 17
diff --git a/src/lib/libssl/tls13_record.c b/src/lib/libssl/tls13_record.c
index ca61a94ff1..c856932b40 100644
--- a/src/lib/libssl/tls13_record.c
+++ b/src/lib/libssl/tls13_record.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_record.c,v 1.5 2020/05/11 18:03:51 jsing Exp $ */ 1/* $OpenBSD: tls13_record.c,v 1.6 2020/05/11 18:08:11 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -145,11 +145,10 @@ tls13_record_recv(struct tls13_record *rec, tls13_read_cb wire_read,
145 if (!CBS_get_u16(&cbs, &rec_len)) 145 if (!CBS_get_u16(&cbs, &rec_len))
146 return TLS13_IO_FAILURE; 146 return TLS13_IO_FAILURE;
147 147
148 /* XXX - record overflow alert. */
149 if ((rec_version >> 8) != SSL3_VERSION_MAJOR) 148 if ((rec_version >> 8) != SSL3_VERSION_MAJOR)
150 return TLS13_IO_RECORD_VERSION; 149 return TLS13_IO_RECORD_VERSION;
151 if (rec_len > TLS13_RECORD_MAX_CIPHERTEXT_LEN) 150 if (rec_len > TLS13_RECORD_MAX_CIPHERTEXT_LEN)
152 return TLS13_IO_FAILURE; 151 return TLS13_IO_RECORD_OVERFLOW;
153 152
154 rec->content_type = content_type; 153 rec->content_type = content_type;
155 rec->version = rec_version; 154 rec->version = rec_version;
diff --git a/src/lib/libssl/tls13_record_layer.c b/src/lib/libssl/tls13_record_layer.c
index 8ca52d0b7f..82a49ae425 100644
--- a/src/lib/libssl/tls13_record_layer.c
+++ b/src/lib/libssl/tls13_record_layer.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_record_layer.c,v 1.40 2020/05/11 18:03:51 jsing Exp $ */ 1/* $OpenBSD: tls13_record_layer.c,v 1.41 2020/05/11 18:08:11 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -768,11 +768,13 @@ tls13_record_layer_read_record(struct tls13_record_layer *rl)
768 if ((rl->rrec = tls13_record_new()) == NULL) 768 if ((rl->rrec = tls13_record_new()) == NULL)
769 goto err; 769 goto err;
770 } 770 }
771 771
772 if ((ret = tls13_record_recv(rl->rrec, rl->cb.wire_read, rl->cb_arg)) <= 0) { 772 if ((ret = tls13_record_recv(rl->rrec, rl->cb.wire_read, rl->cb_arg)) <= 0) {
773 switch (ret) { 773 switch (ret) {
774 case TLS13_IO_RECORD_VERSION: 774 case TLS13_IO_RECORD_VERSION:
775 return tls13_send_alert(rl, SSL_AD_PROTOCOL_VERSION); 775 return tls13_send_alert(rl, SSL_AD_PROTOCOL_VERSION);
776 case TLS13_IO_RECORD_OVERFLOW:
777 return tls13_send_alert(rl, SSL_AD_RECORD_OVERFLOW);
776 } 778 }
777 return ret; 779 return ret;
778 } 780 }