From: William Lallemand Date: Tue, 9 Jan 2018 22:12:27 +0000 (+0100) Subject: BUG/MEDIUM: mworker: execvp failure depending on argv[0] X-Git-Tag: v1.9-dev1~522 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=29f690c94574666f0789af5254890c498011e2ed;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: mworker: execvp failure depending on argv[0] 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. --- diff --git a/src/haproxy.c b/src/haproxy.c index e98420e229..20b18f8541 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -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] != '-') {