diff options
author | jsing <> | 2020-05-11 18:08:11 +0000 |
---|---|---|
committer | jsing <> | 2020-05-11 18:08:11 +0000 |
commit | b533040a570f1fe902202c032531870f58ad4453 (patch) | |
tree | dbb27561139b82aa9e5d608eacbc8c9224b46124 | |
parent | 825d508a4b688821e99561b72a842c81c93b84a5 (diff) | |
download | openbsd-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.h | 3 | ||||
-rw-r--r-- | src/lib/libssl/tls13_record.c | 5 | ||||
-rw-r--r-- | src/lib/libssl/tls13_record_layer.c | 6 |
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 | } |