Skip to content

Commit 1561ae6

Browse files
fix: Prevent SNI callback use-after-free after tls_reload
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
1 parent 6b84489 commit 1561ae6

1 file changed

Lines changed: 6 additions & 3 deletions

File tree

modules/tls_openssl/openssl_config.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -288,12 +288,16 @@ int ssl_servername_cb(SSL *ssl, int *ad, void *arg)
288288
struct tls_domain *dom;
289289
int rc;
290290

291-
if (!ssl || !arg) {
291+
if (!ssl) {
292292
LM_ERR("Bad parameters in servername callback\n");
293293
return SSL_TLSEXT_ERR_NOACK;
294294
}
295295

296-
dom = (struct tls_domain *)arg;
296+
dom = (struct tls_domain *)SSL_get_ex_data(ssl, SSL_EX_DOM_IDX);
297+
if (!dom) {
298+
LM_ERR("Failed to get tls_domain pointer from SSL struct\n");
299+
return SSL_TLSEXT_ERR_NOACK;
300+
}
297301

298302
srvname = (char *)SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name);
299303
if (srvname && strlen(srvname) == 0) {
@@ -827,7 +831,6 @@ int openssl_init_tls_dom(struct tls_domain *d, int init_flags)
827831
/* install callback for SNI */
828832
if (mod_sni_cb && d->flags & DOM_FLAG_SRV) {
829833
SSL_CTX_set_tlsext_servername_callback(((void**)d->ctx)[i], ssl_servername_cb);
830-
SSL_CTX_set_tlsext_servername_arg(((void**)d->ctx)[i], d);
831834
}
832835

833836
/*

0 commit comments

Comments
 (0)