summaryrefslogtreecommitdiffstats
path: root/iptables.c
diff options
context:
space:
mode:
author/C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org </C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org>2006-02-11 09:34:16 +0000
committer/C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org </C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org>2006-02-11 09:34:16 +0000
commite2d50d97877693c39412466dab90fe8ce7e01902 (patch)
tree284929f76c23a40b34b8a77f9aaa318bb57e507e /iptables.c
parent64f44e0a999f0b5d55cf8fcafc29d126324f6ae4 (diff)
fix double-free if a single match is used multiple times within a signle rule
(Closes: #440). However, while this fixes the double-free, it still doesn't make iptables support two of the same matches within one rule. Apparently the last matchinfo is copied into all the previous matchinfo instances.
Diffstat (limited to 'iptables.c')
-rw-r--r--iptables.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/iptables.c b/iptables.c
index e22b9ea..b66e5e1 100644
--- a/iptables.c
+++ b/iptables.c
@@ -1800,8 +1800,10 @@ void clear_rule_matches(struct iptables_rule_match **matches)
for (matchp = *matches; matchp;) {
tmp = matchp->next;
- if (matchp->match->m)
+ if (matchp->match->m) {
free(matchp->match->m);
+ matchp->match->m = NULL;
+ }
free(matchp);
matchp = tmp;
}