BUG/MEDIUM: backend: always call si_detach_endpoint() on async connection failure

In case an asynchronous connection (ALPN) succeeds but the mux fails to
attach, we must release the stream interface's endpoint, otherwise we
leave the stream interface with an endpoint pointing to a freed connection
with si_ops == si_conn_ops, and sess_update_st_cer() calls si_shutw() on
it, causing it to crash.

This must be backported to 1.9 only.
This commit is contained in:
Willy Tarreau 2019-01-28 16:33:35 +01:00
parent 9ef5155ba6
commit d822013f45

View File

@ -1108,6 +1108,8 @@ static int conn_complete_server(struct connection *conn)
return 0;
fail:
si_detach_endpoint(&s->si[1]);
if (cs)
cs_free(cs);
/* kill the connection now */