BUG/MEDIUM: ssl: Fix a crash when using QUIC

Commit 5ab9954faa9c815425fa39171ad33e75f4f7d56f introduced a new flag in
ssl_sock_ctx, to know that an ALPN was negociated, however, the way to
get the ssl_sock_ctx was wrong for QUIC. If we're using QUIC, get it
from the quic_conn.
This should fix crashes when attempting to use QUIC.
This commit is contained in:
Olivier Houchard 2025-09-10 11:40:32 +02:00 committed by Olivier Houchard
parent be86a69fe8
commit 1759c97255

View File

@ -2179,13 +2179,17 @@ static int ssl_sock_advertise_alpn_protos(SSL *s, const unsigned char **out,
{ {
struct ssl_bind_conf *conf = arg; struct ssl_bind_conf *conf = arg;
struct connection *conn; struct connection *conn;
struct ssl_sock_ctx *ctx; struct ssl_sock_ctx *ctx = NULL;
#ifdef USE_QUIC #ifdef USE_QUIC
struct quic_conn *qc = SSL_get_ex_data(s, ssl_qc_app_data_index); struct quic_conn *qc = SSL_get_ex_data(s, ssl_qc_app_data_index);
if (qc)
ctx = qc->xprt_ctx;
#endif #endif
conn = SSL_get_ex_data(s, ssl_app_data_index); if (!ctx) {
ctx = __conn_get_ssl_sock_ctx(conn); conn = SSL_get_ex_data(s, ssl_app_data_index);
ctx = __conn_get_ssl_sock_ctx(conn);
}
if (SSL_select_next_proto((unsigned char**) out, outlen, (const unsigned char *)conf->alpn_str, if (SSL_select_next_proto((unsigned char**) out, outlen, (const unsigned char *)conf->alpn_str,
conf->alpn_len, server, server_len) != OPENSSL_NPN_NEGOTIATED) { conf->alpn_len, server, server_len) != OPENSSL_NPN_NEGOTIATED) {
@ -2203,7 +2207,8 @@ static int ssl_sock_advertise_alpn_protos(SSL *s, const unsigned char **out,
} }
#endif #endif
ctx->flags |= SSL_SOCK_F_HAS_ALPN; if (ctx)
ctx->flags |= SSL_SOCK_F_HAS_ALPN;
return SSL_TLSEXT_ERR_OK; return SSL_TLSEXT_ERR_OK;
} }
#endif #endif