BUG/MINOR: cli: Fix a possible infinite loop in _getsocks()
authorChristopher Faulet <cfaulet@haproxy.com>
Thu, 6 Feb 2025 14:37:52 +0000 (15:37 +0100)
committerWilly Tarreau <w@1wt.eu>
Wed, 19 Feb 2025 10:43:06 +0000 (11:43 +0100)
In _getsocks() functuoin, when we failed to set the unix socket in
non-blocking mode, a goto to "out" label led to loop infinitly. To fix the
issue, we must only let the function exit.

This patch should be backported to all stable versions.

(cherry picked from commit 75e8c8ed330f2ad1b6b33630efebb5041af3d5e9)
Signed-off-by: Willy Tarreau <w@1wt.eu>

src/cli.c

index 7803855..9669b38 100644 (file)
--- a/src/cli.c
+++ b/src/cli.c
@@ -2457,10 +2457,8 @@ static int _getsocks(char **args, char *payload, struct appctx *appctx, void *pr
        }
 
 out:
-       if (fd >= 0 && old_fcntl >= 0 && fcntl(fd, F_SETFL, old_fcntl) == -1) {
+       if (fd >= 0 && old_fcntl >= 0 && fcntl(fd, F_SETFL, old_fcntl) == -1)
                ha_warning("Cannot make the unix socket non-blocking\n");
-               goto out;
-       }
        applet_set_eoi(appctx);
        appctx->st0 = CLI_ST_END;
        free(cmsgbuf);