BUG/MEDIUM: checks: Be sure we have a mux if we created a cs.

In connect_conn_chk(), there were one case we could return with a new
conn_stream created, but no mux attached. With no mux, cs_destroy() would
segfault. Fix that by setting the mux before we can fail.

This should be backported to 1.8.
This commit is contained in:
Olivier Houchard 2017-12-01 22:04:05 +01:00 committed by Willy Tarreau
parent 57dc283014
commit 6377a0004f

View File

@ -1564,18 +1564,6 @@ static int connect_conn_chk(struct task *t)
conn->addr.to = s->addr;
}
if ((conn->addr.to.ss_family == AF_INET) || (conn->addr.to.ss_family == AF_INET6)) {
int i = 0;
i = srv_check_healthcheck_port(check);
if (i == 0) {
cs->data = check;
return SF_ERR_CHK_PORT;
}
set_host_port(&conn->addr.to, i);
}
proto = protocol_by_family(conn->addr.to.ss_family);
conn_prepare(conn, proto, check->xprt);
@ -1583,6 +1571,16 @@ static int connect_conn_chk(struct task *t)
cs_attach(cs, check, &check_conn_cb);
conn->target = &s->obj_type;
if ((conn->addr.to.ss_family == AF_INET) || (conn->addr.to.ss_family == AF_INET6)) {
int i = 0;
i = srv_check_healthcheck_port(check);
if (i == 0)
return SF_ERR_CHK_PORT;
set_host_port(&conn->addr.to, i);
}
/* no client address */
clear_addr(&conn->addr.from);