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 /src | |
| 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@
Diffstat (limited to 'src')
| -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 | } |
