BUG/MAJOR: checks: segfault during tcpcheck_main

When using TCP health checks (tcp-check connect), it is possible to
crash with a segfault when, for reasons yet to be understood, the
protocol family is unknown.

In the function tcpcheck_main(), proto is dereferenced without a prior
test in case it is NULL, leading to the segfault during proto->connect
dereference.

The line has been unmodified since it was introduced, in commit
69e273f3fc.  This was the only use of
proto (or more specifically, the return of  protocol_by_family()) that
was unprotected; all other callsites perform the test for a NULL
pointer.

This patch should be backported to 1.9, 1.8, 1.7, and 1.6.
This commit is contained in:
Ricardo Nabinger Sanchez 2019-03-28 21:42:23 -03:00 committed by Willy Tarreau
parent 06f6811d9f
commit 4bccea9891

View File

@ -2839,7 +2839,7 @@ static int tcpcheck_main(struct check *check)
cs_attach(cs, check, &check_conn_cb);
ret = SF_ERR_INTERNAL;
if (proto->connect)
if (proto && proto->connect)
ret = proto->connect(conn,
1 /* I/O polling is always needed */,
(next && next->action == TCPCHK_ACT_EXPECT) ? 0 : 2);