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
diff --git a/tc/m_ipt.c b/tc/m_ipt.c
index 042fe8b..c9c453a 100644
--- a/tc/m_ipt.c
+++ b/tc/m_ipt.c
@@ -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;