aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/netfilter/ip_nat_irc.c
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2005-07-21 13:14:46 -0700
committerDavid S. Miller <davem@davemloft.net>2005-07-21 13:14:46 -0700
commit4acdbdbe5089c06d5e0c7e96783fcc4414ded00a (patch)
tree77629aef70bd92983518b6f5dd13c70a222c4cbb /net/ipv4/netfilter/ip_nat_irc.c
parent4aa49d130df9209707a97786a55a3f584b7345e9 (diff)
downloadlinux-4acdbdbe5089c06d5e0c7e96783fcc4414ded00a.tar.gz
[NETFILTER]: ip_conntrack_expect_related must not free expectation
If a connection tracking helper tells us to expect a connection, and we're already expecting that connection, we simply free the one they gave us and return success. The problem is that NAT helpers (eg. FTP) have to allocate the expectation first (to see what port is available) then rewrite the packet. If that rewrite fails, they try to remove the expectation, but it was freed in ip_conntrack_expect_related. This is one example of a larger problem: having registered the expectation, the pointer is no longer ours to use. Reference counting is needed for ctnetlink anyway, so introduce it now. To have a single "put" path, we need to grab the reference to the connection on creation, rather than open-coding it in the caller. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/netfilter/ip_nat_irc.c')
-rw-r--r--net/ipv4/netfilter/ip_nat_irc.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/net/ipv4/netfilter/ip_nat_irc.c b/net/ipv4/netfilter/ip_nat_irc.c
index 9c1ca3381d561..de31942babe39 100644
--- a/net/ipv4/netfilter/ip_nat_irc.c
+++ b/net/ipv4/netfilter/ip_nat_irc.c
@@ -65,10 +65,8 @@ static unsigned int help(struct sk_buff **pskb,
break;
}
- if (port == 0) {
- ip_conntrack_expect_free(exp);
+ if (port == 0)
return NF_DROP;
- }
/* strlen("\1DCC CHAT chat AAAAAAAA P\1\n")=27
* strlen("\1DCC SCHAT chat AAAAAAAA P\1\n")=28