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;