diff options
author | Eric Andersen | 2004-02-17 20:04:34 +0000 |
---|---|---|
committer | Eric Andersen | 2004-02-17 20:04:34 +0000 |
commit | 60bb3f31af5b26fdd2e13f82e83c78f0231704f3 (patch) | |
tree | f5f09a26c5297e8a7fc2c07efd284532ca75c4a3 | |
parent | 01cdb66987906ca375feeaa9ff71b91c8469756c (diff) | |
download | busybox-60bb3f31af5b26fdd2e13f82e83c78f0231704f3.zip busybox-60bb3f31af5b26fdd2e13f82e83c78f0231704f3.tar.gz |
Mark Lord writes:
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.
-rw-r--r-- | networking/inetd.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/networking/inetd.c b/networking/inetd.c index eb61299..2906b3c 100644 --- a/networking/inetd.c +++ b/networking/inetd.c @@ -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; |