]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: ssl: SSL backend sessions used after free
authorFrederic Lecaille <flecaille@haproxy.com>
Fri, 13 Feb 2026 12:30:24 +0000 (13:30 +0100)
committerFrederic Lecaille <flecaille@haproxy.com>
Wed, 18 Feb 2026 14:37:13 +0000 (15:37 +0100)
This bug impacts only the backends. The sessions cached could be used after been
freed because of a missing write lock into ssl_sock_handle_hs_error() when freeing
such objects. This issue could be rarely reproduced and only with QUIC with
difficulties (random CRYPTO data corruptions and instrumented code).

Must be backported as far as 2.6.

src/ssl_sock.c

index 291aa9467e0fa06e72c0cc1c7ecb5b75eeec38be..c1ebf7c353bdaf4295dda637f38e7077dae11421 100644 (file)
@@ -6008,8 +6008,9 @@ void ssl_sock_handle_hs_error(struct connection *conn)
                 * another thread */
 
                HA_RWLOCK_RDLOCK(SSL_SERVER_LOCK, &s->ssl_ctx.lock);
-               if (s->ssl_ctx.reused_sess[tid].ptr)
-                       ha_free(&s->ssl_ctx.reused_sess[tid].ptr);
+               HA_RWLOCK_WRLOCK(SSL_SERVER_LOCK, &s->ssl_ctx.reused_sess[tid].sess_lock);
+               ha_free(&s->ssl_ctx.reused_sess[tid].ptr);
+               HA_RWLOCK_WRUNLOCK(SSL_SERVER_LOCK, &s->ssl_ctx.reused_sess[tid].sess_lock);
                HA_RWLOCK_RDUNLOCK(SSL_SERVER_LOCK, &s->ssl_ctx.lock);
        }