diff -Naur iproute2-original/tc/m_ipt.c iproute2-patched/tc/m_ipt.c --- iproute2-original/tc/m_ipt.c 2008-08-05 19:15:56.000000000 +0000 +++ iproute2-patched/tc/m_ipt.c 2008-08-05 21:39:49.000000000 +0000 @@ -277,6 +277,8 @@ if (!handle) { fputs(dlerror(), stderr); printf("\n"); + free(l_name); + free(new_name); return NULL; } } @@ -292,12 +294,16 @@ 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 @@ *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;