It is possible to have a session without a listener. It happens for applets
on the client side. Thus all accesses to the listener info from the session
must be guarded. It was the purpose of the commit
36119de18 ("BUG/MEDIUM:
session: NULL dereference possible when accessing the listener"). However,
some tests on the session's listener existence are missing in proxy_inc_*
functions.
This patch should fix the issues #1171, #1172, #1173, #1174 and #1175. It
must be backported with the above commit as far as 1.8.
(cherry picked from commit
77e376783e891fe5dda4fe4e1198cf8dff0b118d)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit
d57f8b2b30875e2f5c0c4452a1ec719b9c308041)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit
d571a771c3bc35e4d1054b85389bf39a062b26ac)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
static inline void proxy_inc_fe_conn_ctr(struct listener *l, struct proxy *fe)
{
_HA_ATOMIC_ADD(&fe->fe_counters.cum_conn, 1);
- if (l->counters)
+ if (l && l->counters)
_HA_ATOMIC_ADD(&l->counters->cum_conn, 1);
HA_ATOMIC_UPDATE_MAX(&fe->fe_counters.cps_max,
update_freq_ctr(&fe->fe_conn_per_sec, 1));
{
_HA_ATOMIC_ADD(&fe->fe_counters.cum_sess, 1);
- if (l->counters)
+ if (l && l->counters)
_HA_ATOMIC_ADD(&l->counters->cum_sess, 1);
HA_ATOMIC_UPDATE_MAX(&fe->fe_counters.sps_max,
update_freq_ctr(&fe->fe_sess_per_sec, 1));