# related to bnc#49845, upstream bug #529 diff --git a/openssh-6.4p1/sshd.c b/openssh-6.4p1/sshd.c --- a/openssh-6.4p1/sshd.c +++ b/openssh-6.4p1/sshd.c @@ -309,16 +309,17 @@ sighup_handler(int sig) /* * Called from the main program after receiving SIGHUP. * Restarts the server. */ static void sighup_restart(void) { + int i; logit("Received SIGHUP; restarting."); close_listen_socks(); close_startup_pipes(); alarm(0); /* alarm timer persists across exec */ signal(SIGHUP, SIG_IGN); /* will be restored after exec */ execv(saved_argv[0], saved_argv); logit("RESTART FAILED: av[0]='%.100s', error: %.100s.", saved_argv[0], strerror(errno)); @@ -1382,17 +1383,21 @@ main(int ac, char **av) saved_argv = xcalloc(ac + 1, sizeof(*saved_argv)); for (i = 0; i < ac; i++) saved_argv[i] = xstrdup(av[i]); saved_argv[i] = NULL; #ifndef HAVE_SETPROCTITLE /* Prepare for later setproctitle emulation */ compat_init_setproctitle(ac, av); - av = saved_argv; + + av = xmalloc(sizeof(*saved_argv) * (saved_argc + 1)); + for (i = 0; i < saved_argc; i++) + av[i] = xstrdup(saved_argv[i]); + av[i] = NULL; #endif if (geteuid() == 0 && setgroups(0, NULL) == -1) debug("setgroups(): %.200s", strerror(errno)); /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */ sanitise_stdfd();