From cea9c9201069ff608bb53830773609584f15a28c Mon Sep 17 00:00:00 2001 From: Carson Fleming Date: Wed, 21 Oct 2020 19:05:39 +0200 Subject: Copied the command buffer to the stack to resolve memory leak --- daemonize.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/daemonize.c b/daemonize.c index 7b9daac..001f260 100644 --- a/daemonize.c +++ b/daemonize.c @@ -89,15 +89,18 @@ int main (int argc, char** argv) { int arglen = strlen(argv[optind]); while (cmdlen+arglen+1 > buff_size) { buff_size *= 2; - buffer = realloc(buffer, buff_size); - if (buffer == NULL) q("[daemonize] Out of memory parsing arguments."); } + buffer = realloc(buffer, buff_size); + if (buffer == NULL) q("[daemonize] Out of memory parsing arguments."); strncpy(&buffer[cmdlen], argv[optind++], arglen); cmdlen += arglen+1; buffer[cmdlen-1] = ' '; } + buffer[cmdlen-1] = 0; - + char cmd[cmdlen]; + memcpy(cmd, buffer, cmdlen); + free(buffer); if (cmdlen < 1) qtoofewargs(); // Set up logs as appropriate @@ -125,6 +128,6 @@ int main (int argc, char** argv) { daemon(options.nochdir, options.noclose | logs); - char* args[] = {"/bin/sh", "-c", buffer, NULL}; + char* args[] = {"/bin/sh", "-c", cmd, NULL}; execv(args[0], args); } -- cgit v1.2.3