From c2b7f80a91ed01f78aa22b3e2afeda0672501e0c Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Thu, 20 Sep 2018 11:22:29 +0200 Subject: [PATCH] BUG/MINOR: cli: make sure the "getsock" command is only called on connections Theorically nothing would prevent a front applet form connecting to a stats socket, and if a "getsock" command was issued, it would cause a crash. Right now nothing in the code does this so in its current form there is no impact. It may or may not be backported to 1.8. --- src/cli.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/cli.c b/src/cli.c index 6d0548303..ed17aac77 100644 --- a/src/cli.c +++ b/src/cli.c @@ -1376,11 +1376,18 @@ static int _getsocks(char **args, char *payload, struct appctx *appctx, void *pr int tot_fd_nb = 0; struct proxy *px; int i = 0; - int fd = remote->handle.fd; + int fd = -1; int curoff = 0; - int old_fcntl; + int old_fcntl = -1; int ret; + if (!remote) { + ha_warning("Only works on real connections\n"); + goto out; + } + + fd = remote->handle.fd; + /* Temporary set the FD in blocking mode, that will make our life easier */ old_fcntl = fcntl(fd, F_GETFL); if (old_fcntl < 0) { @@ -1529,7 +1536,7 @@ static int _getsocks(char **args, char *payload, struct appctx *appctx, void *pr } out: - if (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; }