QUIC: Define error code for stateless reset

Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tim Hudson <tjh@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/23598)
This commit is contained in:
Hugo Landau 2024-02-15 09:14:41 +00:00
parent c38558357d
commit 5f02bbd5a6
4 changed files with 33 additions and 2 deletions

View File

@ -23,7 +23,8 @@ OSSL_QUIC_ERR_AEAD_LIMIT_REACHED,
OSSL_QUIC_ERR_NO_VIABLE_PATH,
OSSL_QUIC_ERR_CRYPTO_ERR_BEGIN,
OSSL_QUIC_ERR_CRYPTO_ERR_END,
OSSL_QUIC_ERR_CRYPTO_ERR
OSSL_QUIC_ERR_CRYPTO_ERR,
OSSL_QUIC_LOCAL_ERR_IDLE_TIMEOUT
- get information about why a QUIC connection was closed
=head1 SYNOPSIS
@ -67,6 +68,8 @@ OSSL_QUIC_ERR_CRYPTO_ERR
#define OSSL_QUIC_ERR_CRYPTO_ERR(X)
#define OSSL_QUIC_LOCAL_ERR_IDLE_TIMEOUT
=head1 DESCRIPTION
The SSL_get_conn_close_info() function provides information about why and how a
@ -124,6 +127,29 @@ by the local or remote application.
=back
The B<OSSL_QUIC_ERR> macro definitions provide the QUIC transport error codes as
defined by RFC 9000. The OSSL_QUIC_ERR_CRYPTO_ERR() macro can be used to convert
a TLS alert code into a QUIC transport error code by mapping it into the range
reserved for such codes by RFC 9000. This range begins at
B<OSSL_QUIC_ERR_CRYPTO_ERR_BEGIN> and ends at B<OSSL_QUIC_ERR_CRYPTO_ERR_END>
inclusive.
=head1 NON-STANDARD TRANSPORT ERROR CODES
Some conditions which can cause QUIC connection termination are not signalled on
the wire and therefore do not have standard error codes. OpenSSL indicates these
errors via SSL_get_conn_close_info() by setting B<SSL_CONN_CLOSE_FLAG_TRANSPORT>
and using one of the following error values. These codes are specific to
OpenSSL, and cannot be sent over the wire, as they are above 2**62.
=over 4
=item B<OSSL_QUIC_LOCAL_ERR_IDLE_TIMEOUT>
The connection was terminated immediately due to the idle timeout expiring.
=back
=head1 RETURN VALUES
SSL_get_conn_close_info() returns 1 on success and 0 on failure. This function

View File

@ -58,6 +58,10 @@ __owur const SSL_METHOD *OSSL_QUIC_client_thread_method(void);
# define OSSL_QUIC_ERR_CRYPTO_ERR(X) \
(OSSL_QUIC_ERR_CRYPTO_ERR_BEGIN + (X))
/* Local errors. */
# define OSSL_QUIC_LOCAL_ERR_IDLE_TIMEOUT \
((uint64_t)0xFFFFFFFFFFFFFFFFULL)
# ifdef __cplusplus
}
# endif

View File

@ -3325,7 +3325,7 @@ static void ch_on_idle_timeout(QUIC_CHANNEL *ch)
* TERMINATED anyway.
*/
ch->terminate_cause.app = 0;
ch->terminate_cause.error_code = UINT64_MAX;
ch->terminate_cause.error_code = OSSL_QUIC_LOCAL_ERR_IDLE_TIMEOUT;
ch->terminate_cause.frame_type = 0;
ch_record_state_transition(ch, QUIC_CHANNEL_STATE_TERMINATED);

View File

@ -510,6 +510,7 @@ OSSL_QUIC_ERR_NO_VIABLE_PATH define
OSSL_QUIC_ERR_CRYPTO_ERR_BEGIN define
OSSL_QUIC_ERR_CRYPTO_ERR_END define
OSSL_QUIC_ERR_CRYPTO_ERR define
OSSL_QUIC_LOCAL_ERR_IDLE_TIMEOUT define
PEM_FLAG_EAY_COMPATIBLE define
PEM_FLAG_ONLY_B64 define
PEM_FLAG_SECURE define