diff options
author | Tomas Mraz <tomas@openssl.org> | 2023-05-30 22:14:58 +0200 |
---|---|---|
committer | Tomas Mraz <tomas@openssl.org> | 2023-07-07 15:13:29 +0200 |
commit | 9c3ea4e1d7580fc061dfb754b620adb3439e683f (patch) | |
tree | e87832dee0de7a0e5a1f0da4a71e59ac89f3345d /doc | |
parent | 5c3474ea563ed95bb7c86c08867139613655276b (diff) |
QUIC err handling: Save and restore error state
We save the error state from the thread that encountered
a permanent error condition caused by system or internal
error to the QUIC_CHANNEL.
Then we restore it whenever we are returning to a user
call when protocol is shutdown.
Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: Hugo Landau <hlandau@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/21087)
Diffstat (limited to 'doc')
-rw-r--r-- | doc/build.info | 6 | ||||
-rw-r--r-- | doc/man3/OSSL_ERR_STATE_save.pod | 69 |
2 files changed, 75 insertions, 0 deletions
diff --git a/doc/build.info b/doc/build.info index 24d4050a45..7b96381240 100644 --- a/doc/build.info +++ b/doc/build.info @@ -1687,6 +1687,10 @@ DEPEND[html/man3/OSSL_ENCODER_to_bio.html]=man3/OSSL_ENCODER_to_bio.pod GENERATE[html/man3/OSSL_ENCODER_to_bio.html]=man3/OSSL_ENCODER_to_bio.pod DEPEND[man/man3/OSSL_ENCODER_to_bio.3]=man3/OSSL_ENCODER_to_bio.pod GENERATE[man/man3/OSSL_ENCODER_to_bio.3]=man3/OSSL_ENCODER_to_bio.pod +DEPEND[html/man3/OSSL_ERR_STATE_save.html]=man3/OSSL_ERR_STATE_save.pod +GENERATE[html/man3/OSSL_ERR_STATE_save.html]=man3/OSSL_ERR_STATE_save.pod +DEPEND[man/man3/OSSL_ERR_STATE_save.3]=man3/OSSL_ERR_STATE_save.pod +GENERATE[man/man3/OSSL_ERR_STATE_save.3]=man3/OSSL_ERR_STATE_save.pod DEPEND[html/man3/OSSL_ESS_check_signing_certs.html]=man3/OSSL_ESS_check_signing_certs.pod GENERATE[html/man3/OSSL_ESS_check_signing_certs.html]=man3/OSSL_ESS_check_signing_certs.pod DEPEND[man/man3/OSSL_ESS_check_signing_certs.3]=man3/OSSL_ESS_check_signing_certs.pod @@ -3325,6 +3329,7 @@ html/man3/OSSL_ENCODER.html \ html/man3/OSSL_ENCODER_CTX.html \ html/man3/OSSL_ENCODER_CTX_new_for_pkey.html \ html/man3/OSSL_ENCODER_to_bio.html \ +html/man3/OSSL_ERR_STATE_save.html \ html/man3/OSSL_ESS_check_signing_certs.html \ html/man3/OSSL_HPKE_CTX_new.html \ html/man3/OSSL_HTTP_REQ_CTX.html \ @@ -3963,6 +3968,7 @@ man/man3/OSSL_ENCODER.3 \ man/man3/OSSL_ENCODER_CTX.3 \ man/man3/OSSL_ENCODER_CTX_new_for_pkey.3 \ man/man3/OSSL_ENCODER_to_bio.3 \ +man/man3/OSSL_ERR_STATE_save.3 \ man/man3/OSSL_ESS_check_signing_certs.3 \ man/man3/OSSL_HPKE_CTX_new.3 \ man/man3/OSSL_HTTP_REQ_CTX.3 \ diff --git a/doc/man3/OSSL_ERR_STATE_save.pod b/doc/man3/OSSL_ERR_STATE_save.pod new file mode 100644 index 0000000000..79f3aba5f8 --- /dev/null +++ b/doc/man3/OSSL_ERR_STATE_save.pod @@ -0,0 +1,69 @@ +=pod + +=head1 NAME + +OSSL_ERR_STATE_new, OSSL_ERR_STATE_save, OSSL_ERR_STATE_restore, +OSSL_ERR_STATE_free - saving and restoring error state + +=head1 SYNOPSIS + + #include <openssl/err.h> + + ERR_STATE *OSSL_ERR_STATE_new(void); + void OSSL_ERR_STATE_save(ERR_STATE *es); + void OSSL_ERR_STATE_restore(const ERR_STATE *es); + void OSSL_ERR_STATE_free(ERR_STATE *es); + +=head1 DESCRIPTION + +These functions save and restore the error state from the thread +local error state to a preallocated error state structure. + +OSSL_ERR_STATE_new() allocates an empty error state structure to +be used when saving and restoring thread error state. + +OSSL_ERR_STATE_save() saves the thread error state to I<es>. It +subsequently clears the thread error state. Any previously saved +state in I<es> is cleared prior to saving the new state. + +OSSL_ERR_STATE_restore() adds all the error entries from the +saved state I<es> to the thread error state. Existing entries in +the thread error state are not affected if there is enough space +for all the added entries. Any allocated data in the saved error +entries is duplicated on adding to the thread state. + +OSSL_ERR_STATE_free() frees the saved error state I<es>. + +=head1 RETURN VALUES + +OSSL_ERR_STATE_new() returns a pointer to the allocated ERR_STATE +structure or NULL on error. + +OSSL_ERR_STATE_save(), OSSL_ERR_STATE_restore(), OSSL_ERR_STATE_free() +do not return any values. + +=head1 NOTES + +OSSL_ERR_STATE_save() cannot fail as it takes over any allocated +data from the thread error state. + +OSSL_ERR_STATE_restore() is a best effort function. The only failure +that can happen during its operation is when memory allocation fails. +Because it manipulates the thread error state it avoids raising memory +errors on such failure. At worst the restored error entries will be +missing the auxiliary error data. + +=head1 SEE ALSO + +L<ERR_raise(3)>, L<ERR_get_error(3)>, L<ERR_clear_error(3)> + +=head1 COPYRIGHT + +Copyright 2023 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the Apache License 2.0 (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +L<https://www.openssl.org/source/license.html>. + +=cut |