]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: mworker: execvp failure depending on argv[0]
authorWilliam Lallemand <wlallemand@haproxy.com>
Tue, 9 Jan 2018 22:12:27 +0000 (23:12 +0100)
committerWilly Tarreau <w@1wt.eu>
Tue, 9 Jan 2018 22:44:18 +0000 (23:44 +0100)
The copy_argv() function lacks a check on '-' to remove the -x, -sf and
-st parameters.

When reloading a master process with a path starting by /st, /sf, or
/x..  the copy_argv() function skipped argv[0] leading to an execvp()
without the binary.

src/haproxy.c

index e98420e229e21ae744d9fdb3aee3388756a50908..20b18f8541778d77f545406fca50ad249cd5a5bb 100644 (file)
@@ -1242,7 +1242,8 @@ static char **copy_argv(int argc, char **argv)
 
        while (i < argc) {
                /* -sf or -st or -x */
-               if ((argv[i][1] == 's' && (argv[i][2] == 'f' || argv[i][2] == 't')) || argv[i][1] == 'x' ) {
+               if (i > 0 && argv[i][0] == '-' &&
+                   ((argv[i][1] == 's' && (argv[i][2] == 'f' || argv[i][2] == 't')) || argv[i][1] == 'x' )) {
                        /* list of pids to finish ('f') or terminate ('t') or unix socket (-x) */
                        i++;
                        while (i < argc && argv[i][0] != '-') {