diff options
author | jsing <> | 2020-01-23 02:49:38 +0000 |
---|---|---|
committer | jsing <> | 2020-01-23 02:49:38 +0000 |
commit | b70929d8816a98e03f2a44de9ee1c07edde90382 (patch) | |
tree | 57ca5e667e9100c8bbc3b880854a9337c1f4e5f2 /src/lib/libssl/tls13_lib.c | |
parent | cd57d3e792c4bb00f2fc86958119e7c341203865 (diff) | |
download | openbsd-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.c | 13 |
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: |