From e4f6bfd6fec87e8eb77f1a9fe34b8b7884ef9748 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sat, 22 Jul 2017 03:04:20 +0200 Subject: zcip: fix slow environment leak Signed-off-by: Denys Vlasenko --- networking/zcip.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'networking/zcip.c') diff --git a/networking/zcip.c b/networking/zcip.c index 232165efa..94174a165 100644 --- a/networking/zcip.c +++ b/networking/zcip.c @@ -183,6 +183,7 @@ static int run(char *argv[3], const char *param, uint32_t nip) int status; const char *addr = addr; /* for gcc */ const char *fmt = "%s %s %s" + 3; + char *env_ip = env_ip; argv[2] = (char*)param; @@ -190,12 +191,16 @@ static int run(char *argv[3], const char *param, uint32_t nip) if (nip != 0) { addr = nip_to_a(nip); - xsetenv("ip", addr); + /* Must not use setenv() repeatedly, it leaks memory. Use putenv() */ + env_ip = xasprintf("ip=%s", addr); + putenv(env_ip); fmt -= 3; } bb_error_msg(fmt, argv[2], argv[0], addr); - status = spawn_and_wait(argv + 1); + if (nip != 0) + bb_unsetenv_and_free(env_ip); + if (status < 0) { bb_perror_msg("%s %s %s" + 3, argv[2], argv[0]); return -errno; -- cgit v1.2.3