]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: tcp-rules: check that the listener exists before updating its counters
authorWilly Tarreau <w@1wt.eu>
Thu, 22 Dec 2016 17:14:41 +0000 (18:14 +0100)
committerWilly Tarreau <w@1wt.eu>
Thu, 22 Dec 2016 22:26:37 +0000 (23:26 +0100)
The tcp rules may be applied to a TCP stream initiated by applets (spoe,
lua, peers, later H2). These ones do not necessarily have a valid listener
so we must verify the field is not null before updating the stats. For now
there's no way to trigger this bug because lua and peers don't have analysers,
h2 is not implemented and spoe has a dummy listener. But this threatens to
break at any instant.

src/tcp_rules.c

index 3e1aad18ffb2c8addcab89b5acf3b1ecb14fed66..b87ab4b65b7cddb43a4699942dfba985ac044d81 100644 (file)
@@ -168,7 +168,7 @@ resume_execution:
 
                                s->be->be_counters.denied_req++;
                                sess->fe->fe_counters.denied_req++;
-                               if (sess->listener->counters)
+                               if (sess->listener && sess->listener->counters)
                                        sess->listener->counters->denied_req++;
 
                                if (!(s->flags & SF_ERR_MASK))
@@ -346,7 +346,7 @@ resume_execution:
 
                                s->be->be_counters.denied_resp++;
                                sess->fe->fe_counters.denied_resp++;
-                               if (sess->listener->counters)
+                               if (sess->listener && sess->listener->counters)
                                        sess->listener->counters->denied_resp++;
 
                                if (!(s->flags & SF_ERR_MASK))
@@ -428,7 +428,7 @@ int tcp_exec_l4_rules(struct session *sess)
                        }
                        else if (rule->action == ACT_ACTION_DENY) {
                                sess->fe->fe_counters.denied_conn++;
-                               if (sess->listener->counters)
+                               if (sess->listener && sess->listener->counters)
                                        sess->listener->counters->denied_conn++;
 
                                result = 0;
@@ -515,7 +515,7 @@ int tcp_exec_l5_rules(struct session *sess)
                        }
                        else if (rule->action == ACT_ACTION_DENY) {
                                sess->fe->fe_counters.denied_sess++;
-                               if (sess->listener->counters)
+                               if (sess->listener && sess->listener->counters)
                                        sess->listener->counters->denied_sess++;
 
                                result = 0;