summaryrefslogtreecommitdiff
path: root/src/lib/libssl/tls13_lib.c
diff options
context:
space:
mode:
authorjsing <>2020-01-23 02:49:38 +0000
committerjsing <>2020-01-23 02:49:38 +0000
commitb70929d8816a98e03f2a44de9ee1c07edde90382 (patch)
tree57ca5e667e9100c8bbc3b880854a9337c1f4e5f2 /src/lib/libssl/tls13_lib.c
parentcd57d3e792c4bb00f2fc86958119e7c341203865 (diff)
downloadopenbsd-b70929d8816a98e03f2a44de9ee1c07edde90382.tar.gz
openbsd-b70929d8816a98e03f2a44de9ee1c07edde90382.tar.bz2
openbsd-b70929d8816a98e03f2a44de9ee1c07edde90382.zip
Add a TLS13_IO_ALERT return value so that we can explicitly signal when
we sent or received a fatal alert. Pull the fatal_alert check up into tls13_legacy_error(). Also, if sending an alert resulted in EOF, do not propagate this back since we do not want to signal EOF to the caller (rather we want to indicate failure). ok beck@ tb@
Diffstat (limited to '')
-rw-r--r--src/lib/libssl/tls13_lib.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/lib/libssl/tls13_lib.c b/src/lib/libssl/tls13_lib.c
index 51a2a383ed..727f617471 100644
--- a/src/lib/libssl/tls13_lib.c
+++ b/src/lib/libssl/tls13_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_lib.c,v 1.21 2020/01/22 13:10:51 jsing Exp $ */ 1/* $OpenBSD: tls13_lib.c,v 1.22 2020/01/23 02:49:38 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 * Copyright (c) 2019 Bob Beck <beck@openbsd.org> 4 * Copyright (c) 2019 Bob Beck <beck@openbsd.org>
@@ -349,6 +349,10 @@ tls13_legacy_error(SSL *ssl)
349 struct tls13_ctx *ctx = ssl->internal->tls13; 349 struct tls13_ctx *ctx = ssl->internal->tls13;
350 int reason = SSL_R_UNKNOWN; 350 int reason = SSL_R_UNKNOWN;
351 351
352 /* If we received a fatal alert we already put an error on the stack. */
353 if (S3I(ssl)->fatal_alert != 0)
354 return;
355
352 switch (ctx->error.code) { 356 switch (ctx->error.code) {
353 case TLS13_ERR_VERIFY_FAILED: 357 case TLS13_ERR_VERIFY_FAILED:
354 reason = SSL_R_CERTIFICATE_VERIFY_FAILED; 358 reason = SSL_R_CERTIFICATE_VERIFY_FAILED;
@@ -384,8 +388,11 @@ tls13_legacy_return_code(SSL *ssl, ssize_t ret)
384 return 0; 388 return 0;
385 389
386 case TLS13_IO_FAILURE: 390 case TLS13_IO_FAILURE:
387 if (S3I(ssl)->fatal_alert == 0) 391 tls13_legacy_error(ssl);
388 tls13_legacy_error(ssl); 392 return -1;
393
394 case TLS13_IO_ALERT:
395 tls13_legacy_error(ssl);
389 return -1; 396 return -1;
390 397
391 case TLS13_IO_WANT_POLLIN: 398 case TLS13_IO_WANT_POLLIN: