]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: listener: Don't schedule frontend without task in listener_release()
authorChristopher Faulet <cfaulet@haproxy.com>
Thu, 14 Mar 2024 08:29:09 +0000 (09:29 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Thu, 14 Mar 2024 08:34:36 +0000 (09:34 +0100)
null pointer dereference was reported by Coverity in listener_release()
function. Indeed, we must not try to schedule frontend without task when a
limit is still blocking the frontend. This issue was introduced by commit
65ae1347c7 ("BUG/MINOR: listener: Wake proxy's mngmt task up if necessary on
session release")

This patch should fix issue #2488. It must be backported to all stable
version with the commit above.

src/listener.c

index 86d4c44f5fe0ee03ecceaef7919a383c2f0c23d3..6e37984a85ae02a872ad9f91d58d0f698f836e83 100644 (file)
@@ -1606,7 +1606,7 @@ void listener_release(struct listener *l)
                unsigned int wait;
                int expire = TICK_ETERNITY;
 
-               if (fe->fe_sps_lim &&
+               if (fe->task && fe->fe_sps_lim &&
                    (wait = next_event_delay(&fe->fe_sess_per_sec,fe->fe_sps_lim, 0))) {
                        /* we're blocking because a limit was reached on the number of
                         * requests/s on the frontend. We want to re-check ASAP, which
@@ -1614,7 +1614,7 @@ void listener_release(struct listener *l)
                         * timer will have settled down.
                         */
                        expire = tick_first(fe->task->expire, tick_add(now_ms, wait));
-                       if (fe->task && tick_isset(expire))
+                       if (tick_isset(expire))
                                task_schedule(fe->task, expire);
                }
        }