From 3bb2a38f01990919b7285ce94e0ae762722dafba Mon Sep 17 00:00:00 2001 From: Aurelien DARRAGON Date: Tue, 7 Feb 2023 13:26:14 +0100 Subject: [PATCH] BUG/MINOR: listener: fix resume_listener() resume return value handling In resume_listener(), proto->resume() errors were not properly handled: the function kept flowing down as if no errors were detected. Instead, we're performing an early return when such errors are detected to prevent undefined behaviors. This could be backported up to 2.4. -- Backport notes: This commit depends on: - "MINOR: listener: make sure we don't pause/resume bypassed listeners" -> 2.4 ... 2.7: Replace this: | if (l->bind_conf->maxconn && l->nbconn >= l->bind_conf->maxconn) { | l->rx.proto->disable(l); By this: | if (l->maxconn && l->nbconn >= l->maxconn) { | l->rx.proto->disable(l); --- src/listener.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/listener.c b/src/listener.c index 22b3b9168..82c863179 100644 --- a/src/listener.c +++ b/src/listener.c @@ -554,8 +554,11 @@ int resume_listener(struct listener *l, int lpx, int lli) if (!(l->flags & LI_F_FINALIZED) || l->state == LI_READY) goto end; - if (l->rx.proto->resume) + if (l->rx.proto->resume) { ret = l->rx.proto->resume(l); + if (!ret) + goto end; /* failure to resume */ + } if (l->bind_conf->maxconn && l->nbconn >= l->bind_conf->maxconn) { l->rx.proto->disable(l);