Mark Lord writes:
authorEric Andersen <andersen@codepoet.org>
Tue, 17 Feb 2004 20:04:34 +0000 (20:04 -0000)
committerEric Andersen <andersen@codepoet.org>
Tue, 17 Feb 2004 20:04:34 +0000 (20:04 -0000)
The config file processing for inetd in busybox-1.00-pre7 and newer
is broken -- the saved command argv[] values overwrite each other.

Patch to fix it is attached.

Cheers
--
Mark Lord
Real-Time Remedies Inc.

networking/inetd.c

index eb61299..2906b3c 100644 (file)
@@ -426,7 +426,7 @@ more:
                sep->se_argv[argc++] = NULL;
        }
 
-       free(cp);
+       //free(cp);     // BUG: cp is the argv[] container; we must not free it here!
        return (sep);
 }
 
@@ -589,7 +589,10 @@ static void config(int signum)
                                SWAP(char *, sep->se_argv[i], cp->se_argv[i]);
 #undef SWAP
                        sigprocmask(SIG_SETMASK, &oldmask, NULL);
-                       freeconfig(cp);
+                       // This freeconfig() is probably a bug, since it will try and free()
+                       // each of the argv[] values, which are really just pointers
+                       // into the middle of a single line buffer for the config file.
+                       //freeconfig(cp);       // BUG?
                } else {
                        sep = (struct servtab *)xmalloc(sizeof (*sep));
                        *sep = *cp;