From 6e34e7dc0ae01176f1c2a2fa2e6310b0e04ae204 Mon Sep 17 00:00:00 2001 From: Denys Fedoryshchenko Date: Tue, 6 Jan 2009 19:41:50 -0800 Subject: [PATCH] Fix tc/m_ipt memory leaks 1)optind according iptables sources have to be set to 0. If it is set to 1, in batch it will mess up things. Also in iptables sources i notice that ->tflags and ->used need to be reset. 2)Since target->t = fw_calloc(1, size); allocated memory in function build_st, it have to be freed at the end, or in batch we will have memory leak. TODO: Probably it must be freed in all "return -1" cases in parse_ipt after build_st. About this i am not sure, up to Stephen. 3)new_name was malloc'ed, but not freed --- tc/m_ipt.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/tc/m_ipt.c b/tc/m_ipt.c index 042fe8b8..c9c453a3 100644 --- a/tc/m_ipt.c +++ b/tc/m_ipt.c @@ -277,6 +277,8 @@ get_target_name(const char *name) if (!handle) { fputs(dlerror(), stderr); printf("\n"); + free(l_name); + free(new_name); return NULL; } } @@ -292,12 +294,16 @@ get_target_name(const char *name) fputs(error, stderr); fprintf(stderr, "\n"); dlclose(handle); + free(l_name); + free(new_name); return NULL; } } } } + free(l_name); + free(new_name); return m; } @@ -512,8 +518,15 @@ static int parse_ipt(struct action_util *a,int *argc_p, *argc_p = rargc - iargc; *argv_p = argv; - optind = 1; + optind = 0; free_opts(opts); + /* Clear flags if target will be used again */ + m->tflags=0; + m->used=0; + /* Free allocated memory */ + if (m->t) + free(m->t); + return 0;